Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Do Jul 03, 2025 19:33

Foren-Übersicht » Programmierung » Mathematik-Forum
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 9 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Zylindrische Billboards
BeitragVerfasst: Mi Okt 24, 2007 12:49 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
hi, ich nutze folgenden Code für ein normales Billboard:
Code:
  1.  
  2. procedure NormalBillBoardBegin;
  3. type
  4.   TMatrix44 = Array[0..15] of single;
  5. var
  6.   x, y: Byte;
  7.   Matrix: TMatrix44;
  8. begin
  9.   glPushMatrix();
  10.   glGetFloatv(GL_MODELVIEW_MATRIX, @Matrix);
  11.   for x := 0 to 2 do
  12.     for y := 0 to 2 do
  13.       if (x = y) then Matrix[x * 4 + y] := 1 else Matrix[x * 4 + y] := 0;
  14.   glLoadMatrixF(@Matrix);
  15. end;
  16.  

jetzt möchte ich gerne ein Zylindrisches Billboard, also eines, welches sich nur um seine Y-Achse ausrichtet.
Dazu muss ich doch einfach nur verhindern, dass der Y-Wert der Matrix normalisiert wird (meiner Meinung nach 2;2)
Ich habe einige Sachen ausprobiert, doch bekomme ich es nicht hin.

Momentan mache ich das so, dass ich einfach CULL_FACE abschalte, allerdings ist der effekt nicht ganz der gleiche, was von beiden ist performanter ?

mfg


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Okt 24, 2007 19:38 
Offline
DGL Member

Registriert: Di Jun 06, 2006 09:59
Beiträge: 474
My current code. modelview matrix is set do Identity before, and real modelview matrix is stored in mat.
Code:
  1. procedure RenderCylindricBillboard(a,b:TVector4f;const radius:single);
  2. var x,y,f:single;
  3. begin
  4.  a:=vectortransform(a,mat);
  5.  b:=vectortransform(b,mat);
  6.  f:=radius/sqrt(sqr(a[0]-b[0])+sqr(a[1]-b[1])+sqr(a[2]-b[2]));
  7.  x:=(a[1]-b[1])*f;
  8.  y:=(b[0]-a[0])*f;
  9.  glBegin(GL_QUADS);
  10.    glTexCoord2f(0,0);
  11.    glVertex3f(a[0]+x,a[1]+y,a[2]);
  12.    glTexCoord2f(0,1);
  13.    glVertex3f(a[0]-x,a[1]-y,a[2]);
  14.    glTexCoord2f(1,1);
  15.    glVertex3f(b[0]-x,b[1]-y,b[2]);
  16.    glTexCoord2f(1,0);
  17.    glVertex3f(b[0]+x,b[1]+y,b[2]);
  18.  glEnd;
  19. end;

_________________
Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Okt 24, 2007 21:07 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
Does vectortransform mean multiplying vector a with mat ? What does this code exactly do ? Isn't there a way to simply transform the current modelview matrix so that the object only rotates around the y-axis ?

you would use this function something like this ?
Code:
  1.  
  2. var
  3.   mat: TMatrix4x4;
  4. begin
  5.   glGetFloatv(GL_MODELVIEW_MATRIX, @mat);
  6.   glPushMatrix;
  7.     glLoadIdentity;
  8.     RenderCylindricBillboard(...)
  9.   glPopmatrix;
  10. end;
  11.  


I think it is not that complicated, because I dont need to rotate around the objects axis. in my case its the same as the world axis.

thx


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Okt 25, 2007 08:31 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Hat das einen besonderen Grund warum ihr englisch redet? ;)

Aber Seth schau mal in dem Tutorial Nachsitzen. Dort findest du erklärt welche Felder in der Matrix wofür zuständig sind. Denn derzeit machst du ja nichts anderes als die Rotation zu löschen. Mit anderen Worten die Flächen zeigen alle in Richtung Bildschirm (nicht zum Mittelpunkt).

Allerdings weiß ich nicht ob du nur einzelne Felder einfach so löschen kannst. Also die die nur von der Drehung um die Y Achse geschrieben werden (sin(ß) und -sin(ß)). Das wäre wohl doch zu einfach.

PS: Im Anchluss verschiebe ich das Thema ins Matheforum. Finde dort passt es besser.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Okt 25, 2007 11:45 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
aufgrund dieses tutorials habe ich ja einige sachen probiert, die aber misslungen sind.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Okt 25, 2007 20:12 
Offline
DGL Member
Benutzeravatar

Registriert: Do Jun 19, 2003 10:44
Beiträge: 991
Wohnort: Karlsfeld (nahe München)
Hast du den Wiki Artikel zylindrisches_Billboard auch schon gelesen?

_________________
Danke an alle, die mir (und anderen) geholfen haben.
So weit... ...so gut


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Okt 26, 2007 09:04 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
ja aber da scheint es ja darum zu gehen, das objekt an seiner eigenen achse auszurichten. so kompliziert muss ichs gar nicht haben, mir reicht die y-weltachse.


mfg


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Okt 26, 2007 11:48 
Offline
DGL Member

Registriert: Di Jun 06, 2006 09:59
Beiträge: 474
Da war ich wohl vorher gerade auf ner englischen Seite unterwegs^^
wenn dir die ausrichtung an der y-Achse der Welt reicht, kannst du doch einfach ein Quad mit
x1,y1-radius
x1,y1+radius
x2,y2-radius
x2,y2+radius
rendern.

_________________
Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Okt 26, 2007 13:46 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
ich verstehe nicht ganz :?


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 9 Beiträge ] 
Foren-Übersicht » Programmierung » Mathematik-Forum


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.008s | 15 Queries | GZIP : On ]