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

Aktuelle Zeit: So Jul 20, 2025 00:32

Foren-Übersicht » Programmierung » OpenGL
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 22 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags: Partikel mit Billboards: Hilfe!
BeitragVerfasst: Di Aug 21, 2007 23:43 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Hi @ll,

Klar, irgendwann musste ich hier ankommen: Partikel, und damit auch Billboards.

Ich versuche mich momentan an den Sphährischen dieser Art. Ich habe mir den Wiki-Artikel angeschaut und irgendwie komm ich nicht so recht weiter. Ich habe jetzt die 2. und 3. Methode versucht, immer hat irgendwas nicht geklappt.

Bei der zweiten (Softwarematrix) habe ich es nicht geschafft, meine Wasserspiegelung ordnungsgemäß zu berechnen, ich habs also nicht geschafft, die Partikel an der XZ-Ebene zu spiegeln.

Bei der dritten (Up-/Right-Vector) bekomme ich teilweise SIGPE-Fehler (was auch immer das heißen mag, ich vermute floating point operation) und sonst werden auch die Partikel nicht richtig gedreht...

Letzendlich ist es mir relativ egal, welche ich verwende, hauptsache es läuft, am besten wär aber natürlich die 3., weil mehr speed.

(Hinweis: Ich habe meine Kameraoperationen in der Projektionsmatrix, was das ganze wohl noch etwas komplexer macht, aber es geht bei mir leider nicht anders, weil ich die Nicht-Kamera-Matrix-Operation in Shadern separat verwenden muss)

Mein Code zur zweiten:
Code:
  1.  
  2. // BeginRender:
  3. glMatrixMode(GL_PROJECTION);
  4.     glPushMatrix;
  5.     glGetFloatv(GL_PROJECTION_MATRIX, @Data.FOrigMatrix);
  6.     glLoadIdentity;
  7.     glRotatef(glManager.CamRotation.X, 1.0, 0.0, 0.0);
  8.     glRotatef(glManager.CamRotation.Y, 0.0, 1.0, 0.0);
  9.    
  10.     glGetFloatv(GL_PROJECTION_MATRIX, @Data.FUsedMatrix);
  11.     glLoadIdentity;
  12.     glLoadMatrixf(@glManager.ProjectionMatrix);
  13.     glTranslatef(0.0, 0.0, glManager.CamPosition.Z);
  14.     glGetFloatv(GL_PROJECTION_MATRIX, @Data.FProjMatrix);
  15.    
  16.     if glManager.RevertY then
  17.       glScalef(1.0, -1.0, 1.0);
  18.   glMatrixMode(GL_MODELVIEW);
  19.   glPushMatrix;
  20.   glLoadIdentity;        
  21.  
  22. // DoRender
  23.   glDisable(GL_TEXTURE_2D);
  24.   SetupBlendMode(bmNormal, True); // glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
  25.   glColor4f(1.0, 1.0, 1.0, 0.1);
  26.   BufPosition := Data.FUsedMatrix * FPosition; // Überladener Operator (FPC) für eine normale Matrixanwendung nach dem Tutorial "Nachsitzen"
  27.   glBegin(GL_QUADS);
  28.     glVertex3f(BufPosition.X-FParticleSize, BufPosition.Y-FParticleSize, BufPosition.Z);
  29.     glVertex3f(BufPosition.X-FParticleSize, BufPosition.Y+FParticleSize, BufPosition.Z);
  30.     glVertex3f(BufPosition.X+FParticleSize, BufPosition.Y+FParticleSize, BufPosition.Z);
  31.     glVertex3f(BufPosition.X+FParticleSize, BufPosition.Y-FParticleSize, BufPosition.Z);
  32.  
  33.     glVertex3f(BufPosition.X+FParticleSize, BufPosition.Y-FParticleSize, BufPosition.Z);
  34.     glVertex3f(BufPosition.X+FParticleSize, BufPosition.Y+FParticleSize, BufPosition.Z);
  35.     glVertex3f(BufPosition.X-FParticleSize, BufPosition.Y+FParticleSize, BufPosition.Z);
  36.     glVertex3f(BufPosition.X-FParticleSize, BufPosition.Y-FParticleSize, BufPosition.Z);
  37.   glEnd;  
  38.  
  39. //EndRender
  40.   glMatrixMode(GL_PROJECTION);
  41.     glPopMatrix;
  42.   glMatrixMode(GL_MODELVIEW);
  43.  


Beginrender wird vor allen Partikeln, DoRender für jedes Partikel und EndRender nach allen durchgeführt.

Und hier zur dritten;
Code:
  1.  
  2. //BeginRender
  3.   glMatrixMode(GL_PROJECTION);
  4.     glPushMatrix;
  5.     glGetFloatv(GL_PROJECTION_MATRIX, @Data.FOrigMatrix);
  6.     glLoadIdentity;
  7.     glRotatef(glManager.CamRotation.X, 1.0, 0.0, 0.0);
  8.     glRotatef(glManager.CamRotation.Y, 0.0, 1.0, 0.0);
  9.  
  10.     glGetFloatv(GL_PROJECTION_MATRIX, @Data.FUsedMatrix);
  11.     glLoadIdentity;
  12.     {glLoadMatrixf(@glManager.ProjectionMatrix);
  13.     glTranslatef(0.0, 0.0, glManager.CamPosition.Z);
  14.     glGetFloatv(GL_PROJECTION_MATRIX, @Data.FProjMatrix);}
  15.     glLoadMatrixf(@Data.FOrigMatrix);
  16.   glMatrixMode(GL_MODELVIEW);
  17.   glGetFloatv(GL_MODELVIEW_MATRIX, @M);
  18.  
  19.   Data.FUsedMatrix := M * Data.FUsedMatrix;
  20.   Data.FVectors := Data.FUsedMatrix; // Überladener Zuweisungsoperator (FPC) zum extrahieren der Up-/Right-Vektoren aus der Matrix laut Wiki-Artikel
  21.  
  22. //DoRender
  23.   glDisable(GL_TEXTURE_2D);
  24.   SetupBlendMode(bmNormal, True);
  25.   glColor4f(1.0, 1.0, 1.0, 0.1);
  26.   BufPosition := FPosition;
  27.   glBegin(GL_QUADS);
  28.     glVertex3f( BufPosition.x + Data.FVectors.Right.x + Data.FVectors.Up.x, BufPosition.y + Data.FVectors.Right.y + Data.FVectors.Up.y, BufPosition.z + Data.FVectors.Right.z + Data.FVectors.Up.z );
  29.     glVertex3f( BufPosition.x - Data.FVectors.Right.x + Data.FVectors.Up.x, BufPosition.y - Data.FVectors.Right.y + Data.FVectors.Up.y, BufPosition.z - Data.FVectors.Right.z + Data.FVectors.Up.z );
  30.     glVertex3f( BufPosition.x - Data.FVectors.Right.x - Data.FVectors.Up.x, BufPosition.y - Data.FVectors.Right.y - Data.FVectors.Up.y, BufPosition.z - Data.FVectors.Right.z - Data.FVectors.Up.z );
  31.     glVertex3f( BufPosition.x + Data.FVectors.Right.x - Data.FVectors.Up.x, BufPosition.y + Data.FVectors.Right.y - Data.FVectors.Up.y, BufPosition.z + Data.FVectors.Right.z - Data.FVectors.Up.z );
  32.   glEnd;  
  33.  
  34. //EndRender
  35.   glMatrixMode(GL_PROJECTION);
  36.     glPopMatrix;
  37.   glMatrixMode(GL_MODELVIEW);  
  38.  


So, das war mein Code.

Ich frage mich zudem, wie es zu einem Floating-Point fehler kommen kann, wo ich doch nirgendwo teile...

Gruß Lord Horazont

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Aug 22, 2007 05:48 
Offline
Fels i.d. Brandung
Benutzeravatar

Registriert: Sa Mai 04, 2002 19:48
Beiträge: 3830
Wohnort: Tespe (nahe Hamburg)
Für Partikel würde ich nicht mehr unbedingt Billboards einsetzen. Wesentlich weniger Geometry zur GPU solltest Du befördern, wenn Du Pointsprites einsetzt, was für Dich zudem den Vorteil hätte, dass Du nur mit einem Punkt für die Position eines Partikels arbeiten musst. In der DGLSDK ist ein Beispiel für "PointSprites".

_________________
"Light travels faster than sound. This is why some people appear bright, before you can hear them speak..."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Aug 22, 2007 10:51 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Habe ich gesehen, aber ich wollte mich erstmal um die Backward-Compatibility kümmern und "normale" Billboards einsetzen.
Natürlich würde später da ne Weiche reinkommen nach dem Motto if (GL_ARB_POINT_SPRITES) then mach das ganze mit PointSprites else tu es über den Billboard umweg.

Ich werd mal auf delphi3d.net schauen, wie verbreitet die PointSprite-Erweiterung ist. Wenn nur Grakas, die mit meiner Anwendung sowieso nicht klarkommen würden (ATI :wink: :twisted: ) die nicht haben, kanns mir auch egal sein.

[edit]
Also, delphi3d.net sagt mir, ich kann ruhigen gewissens gl_arb_point_sprite verwenden, aktuelle wie auch nicht mehr ganz aktuelle Grakas können das, zusätzlich zu denen, die noch die gl_nv_point_sprite erweiterung haben dürften das genug sein.

Aber damit komme ich jetzt auch nicht klar: Meine Punkte sind genau 1px groß. Ich habe keine Ahnung, worans liegen kann, ich habe eigentlich fast copy&paste gemacht (im Beispiel ausm sdk gehts):
[edit²]
Ok, FParticleSize war 1.0, aber: Gibt es auch eine möglichkeit, die Größe in Weltkoordinaten und nicht in Pixeln anzugeben? Das ist vorallem nervig, weil die dinger auf Entfernung gleich groß bleiben und das kann ich überhaupt nicht gebrauchen.

Code:
  1.  
  2. //BeginRender
  3.   Scaling[0] := 0.01;
  4.   Scaling[1] := 0.01;
  5.   Scaling[2] := 0.01;
  6.  
  7.   glPointParameterfvARB(GL_POINT_DISTANCE_ATTENUATION_ARB, @Scaling[0]);
  8.   glPointParameterfARB(GL_POINT_SIZE_MIN_ARB, 1.0);
  9.     glTexEnvf( GL_POINT_SPRITE_ARB, GL_COORD_REPLACE_ARB, GL_TRUE );
  10.   glEnable(GL_POINT_SPRITE_ARB);
  11.  
  12. //DoRender
  13.   glPointParameterfARB( GL_POINT_FADE_THRESHOLD_SIZE_ARB, 2.0 ); // Auch andere Werte bringen hier nichts
  14.   maxSize := 60;
  15.   if maxSize > FParticleSize then
  16.     maxSize := FParticleSize;
  17.   glPointSize(maxSize);
  18.   glPointParameterfARB(GL_POINT_SIZE_MAX_ARB, maxSize);
  19.   BufPosition := FPosition;
  20.   glBegin(GL_POINTS);
  21.     glVertex3f(BufPosition.X, BufPosition.Y, BufPosition.Z);
  22.   glEnd;
  23.  
  24. //EndRender
  25.   glDisable(GL_POINT_SPRITE);
  26.  


Gruß Lord Horazont

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Aug 22, 2007 12:42 
Offline
DGL Member

Registriert: So Aug 20, 2006 23:19
Beiträge: 564
Also ich hatte vor kurzem selber ein paar nette Gespräche mit Kyro, weil ich auch bei meinem Billboardsys Probleme hatte. Die billboards gingen zwar an sich, aber durch Rotate und Translate wollten die sich partout nicht beeinflussen lassen, die blieben also stur an ihrer stelle. Deshalb hab ich nen anderen Weg genommen, als die Matrix einfach zu plätten, wie ich es vorher gemacht hab:

Code:
  1.  
  2. type
  3.   TQuadVect     = Array[0..3] of TGLVector3f;
  4.  
  5. function TSE_Effect.GetBillBoardedPosition: TQuadVect;
  6. const QUAD: Array[0..3, 0..1] of Integer = ((1, 1), (-1, 1), (-1, -1), (1, -1));
  7. var Modelviewmatrix:  TMatrix44;
  8.     Right, Up: TGLVector3f;
  9.     i: Integer;
  10. begin
  11.   glGetFloatv(GL_MODELVIEW_MATRIX, @ModelViewMatrix);
  12.   Right := Unite(ModelViewMatrix[0], ModelViewMatrix[4], ModelViewMatrix[8]);
  13.   Up := Unite(ModelViewMatrix[1], ModelViewMatrix[5], ModelViewMatrix[9]);
  14.  
  15.   for i := 0 to 3 do
  16.   begin
  17.     Result[i][0] := (QUAD[i,0]*Right[0] + QUAD[i,1]*Up[0]) * TextureSize[0]/2;
  18.     Result[i][1] := (QUAD[i,0]*Right[1] + QUAD[i,1]*Up[1]) * TextureSize[1]/2;
  19.     Result[i][2] := (QUAD[i,0]*Right[2] + QUAD[i,1]*Up[2]) * TextureSize[1]/2;
  20.   end;
  21. end;


Hier kommt jetzt ein Array aus 4 Vektoren raus, die genau so stehen, dass ihr Normalenvektor dem Sichtvektor der Kamera entspricht, das heisst, man blickt im 90° Winkel auf das Quad.
Nun muss man das Quad nur noch Positionieren udn Rendern:

Code:
  1.  
  2.     NewPos: TQuadVect;
  3.     NewPos := GetBillBoardedPosition;
  4.     glBegin(GL_QUADS);
  5.  
  6.             glColor4f   (Color[0],Color[1],Color[2], Alpha);
  7.  
  8.             glTexCoord2f(1,0);
  9.  
  10.             glVertex3f (Position[0] + NewPos[0][0],
  11.                         Position[1] + NewPos[0][1],
  12.                         Position[2] + NewPos[0][2]);
  13.             glTexCoord2f(0,0);
  14.             glVertex3f (Position[0] + NewPos[1][0],
  15.                         Position[1] + NewPos[1][1],
  16.                         Position[2] + NewPos[1][2]);
  17.             glTexCoord2f(0,1);
  18.             glVertex3f (Position[0] + NewPos[2][0],
  19.                         Position[1] + NewPos[2][1],
  20.                         Position[2] + NewPos[2][2]);
  21.             glTexCoord2f(1,1);
  22.             glVertex3f (Position[0] + NewPos[3][0],
  23.                         Position[1] + NewPos[3][1],
  24.                         Position[2] + NewPos[3][2]);
  25.     glEnd();


NewPos ist also nun das Quad, das genau zum Betrachter gedreht wurde. DIeses muss man nun nur noch an die richtige Stelle (also die Position des Partikels) verschieben. Die Variable ist dafuer offensichtlich Position^^


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Aug 22, 2007 17:02 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Ah ok danke.
Jetzt läufts. Zwar ist die Wasserreflektion immernoch nicht ganz korrekt, aber das bekomme ich entweder hin oder ich lasse es, bei bekannteren kommerziellen Titeln (Sims 2 z.B.) haben die Billboards in den Reflektionen auch ihre probleme :wink:

Im Artikel vom Wiki ist auch etwas leicht widersprüchliches:

Zitat:
r u v p
r u v p
r u v p
0 0 0 1

* r ... Right-(Rechts-)Vektor
* u ... Up-(Nach oben-)Vektor
* v ... View-(Blickrichtungs-)Vektor
* p ... Position


Das steht im Widerspruch mit dem Code:
Code:
  1.  
  2. Right = Vektor( Matrix[0], Matrix[4], Matrix[8] )
  3. Up = Vektor( Matrix[1], Matrix[5], Matrix[9] )
  4.  


Vielleicht sollte das korrigiert werden, vielleicht habe ich hier auch aber einen Denkfehler drinne.

Gruß Lord Horazont

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Aug 23, 2007 00:19 
Offline
DGL Member

Registriert: So Aug 20, 2006 23:19
Beiträge: 564
Widerspruch? Also wenn ich nachzähle, stimmt es eigentlich? Oder bin ich jetz närr'sch?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Aug 23, 2007 12:48 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Wenn ich mich recht erinnere, dann werden die Matrizen von OGL doch folgendermaßen gespeichert:

Code:
  1.  
  2.   0  4  8 12
  3.   1  5  9 13
  4.   2  6 10 14
  5.   3  7 11 15
  6.  

wobei 12, 13 und 14 die Position darstellt.

Zitat:
r u v p
r u v p
r u v p
0 0 0 1

* r ... Right-(Rechts-)Vektor
* u ... Up-(Nach oben-)Vektor
* v ... View-(Blickrichtungs-)Vektor
* p ... Position

Aus der skizze von oben geht aber eigentlich hervor, dass (0, 1, 2) = r, (4, 5, 6) = u, (8, 9, 10) = v und (12, 13, 14) = p. letzteres stimmt ja, aber der rest nicht.

oder irre ich mich?

Gruß Lord Horazont

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Aug 23, 2007 13:07 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Lord Horazont: Ja die Matrix ist so aufgebaut. Habe aber selber erst mal im Wiki nachgschlagen. ;)

http://wiki.delphigl.com/index.php/glLoadMatrix#Beschreibung

PS: Im Nachsitzen Tutorial ist es auch so dargestellt.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Aug 23, 2007 13:10 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Dann kann also das, was in dem Sphärische-Billboards-Artikel steht so nicht stimmen, oder?

Gruß Lord Horazont

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Aug 23, 2007 13:31 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Ja also ich würde dann auch sagen, dass R, U und V der dargestellten Matrix nicht richtig sind. Denn die Berechnung funktioniert ja.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Aug 23, 2007 13:51 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Ich habs mal korrigiert.

Gruß Lord Horazont

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Okt 18, 2007 11:59 
Offline
DGL Member
Benutzeravatar

Registriert: So Okt 26, 2003 20:07
Beiträge: 249
Obwohl der Thread schon etwas älter ist, nochmal was zu Point Sprites:

Zweifellos können Point Sprites schnell sein, aber das ist auch schon das einzige. Das sind sie aber auch nicht mehr, wenn du
a) oft die Textur wechseln musst (einschränkbar)
b) die Größe außerhalb von glBegin/glEnd ändern musst, wenn die Hardware es innerhalb nicht unterstützt.

Dann kommen die ganzen anderen Beschränkungen:
1. Das von dir angesprochene - Größenübergabe in Pixel und keine standardmäßig berechnete Perspektive
2. Keine Transformationen (in Form von Rotation, Smear usw.) möglich
3. Keine spezifischen Normalen (vielleicht lässt sich hier was über nen Pixelshader regeln)
4. Hardwaremäßige Größenbegrenzung
5. Scheinbar eine hardwaremäßig begrenzte Anzahl an Punkten?? Bin darauf beim Experimentieren gestoßen.

Imho sind Point Sprites keine echte Alternative zu den guten alten GL_QUADS, außer vielleicht für einfache Zwecke im 2D-Bereich.

Gruß

_________________
I'm not the signature, I'm just cleaning the floor...

Derzeitiges Projekt:
FireBlade Particle Engine (Release R2 2009.06.29)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Okt 18, 2007 15:26 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Ich bin ja jetz auch bei "normalen" Billbords mit GL_QUADS geblieben. PointSprites sind zwar wie du sagtest ne nette sache für kleinigkeiten im 2D bereich, aber da kann man auch gleich Quads nehmen.

Gruß Lord Horazont

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Okt 19, 2007 12:26 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Aug 18, 2007 18:47
Beiträge: 694
Wohnort: Köln
Programmiersprache: Java
Scheint wohl seinen Grund (s.o.) zu haben, dass es in neueren Spielen nur über Quads realisiert wird.
Bei ET:QW zum Beispiel sind es noch nicht einmal wirkliche Billboards. Sprich sie werden nicht zum Betrachter ausgerichtet. Für eine Rauchsäule werden dann einfach ein paar Quads mehr gezeichnet und schön geblendet. Die sehen echt Klasse aus. Ich gehe mal davon aus, dass es performanter ist einfach ein paar Quads mehr zu zeichnen, als sie "ordentlich" auszurichten.


gruß

damadmax

_________________
Es werde Licht.
glEnable(GL_LIGHTING);
Und es ward Licht.


Zitat aus einem Java Buch: "C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do it blows your whole leg off"

on error goto next


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

Registriert: Di Okt 23, 2007 10:20
Beiträge: 84
unwichtig


Zuletzt geändert von elektrokrach am Di Nov 27, 2007 11:34, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 22 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

Mitglieder in diesem Forum: Bing [Bot] und 7 Gäste


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.012s | 15 Queries | GZIP : On ]