Registriert: Mi Dez 03, 2008 12:01 Beiträge: 167 Wohnort: /country/germany
Programmiersprache: C++ / FreeBASIC
wow, danke, dank euerer Hilfe läuft das nun!
Mein Programm läuft sogar jetzt 1 FPS schneller Ich denke mal, das der Geschwindigkeitsunterschied bei großen Levels dann noch größer sein wird. Momentan rendere ich mit den VBOs ja noch nicht so viel. Screenshot: http://darkinsanity.freehoster.ch/cd_screenshot_01.png
Registriert: Di Mai 18, 2004 16:45 Beiträge: 2623 Wohnort: Berlin
Programmiersprache: Go, C/C++
Es macht durchaus noch sinn auf Indices zu setzen und dein kram nach Texturen zu sortieren.
VBO rendering verliert viel Zeit bei Textur und Shaderswitches sowie zu kleine oder zugroße VBOs.
Wenn du allgemein noch mehr Geschwindigkeit brauchst, dann solltest du auf ein 2 Pass verfahren umstellen.
Im ersten Pass zeichnest du nur in den Z-Buffer dein Mesh und im 2. zeichnest du dann die Szene.
Hierzu wurde im Forum schon mehrfach was geschrieben z.B. http://www.delphigl.com/forum/viewtopic.php?t=8215&start=30.
Das schreiben in den Z-Buffer geht um einiges schneller als das zeichnen sonnst, da nur die Tiefenwerte berechnet werden und kein komplexes Shading gebraucht wird.
Wenn man nun den Tiefentest anschaltet und bestimmt, dass nur die Pixel gezeichnet werden dürfen, die ein Z-Wert gleich dem im Tiefenpuffer ist, dann wird die ganze Szene im Shading geskipped und nur die Vordersten Flächen werden gezeichnet. Das bringt sehr viel, wenn man Shader, Texturen und viele Objekte in der Szene hat.
Ein netter nebeneffekt ist, dass du nur noch die Transparenten Objekte auf Z-Achse sortieren musst(muss man ja eh wegen Blendingfehler) und die restlichen Objekte nicht.
_________________ "Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren" Benjamin Franklin
Registriert: Mi Dez 03, 2008 12:01 Beiträge: 167 Wohnort: /country/germany
Programmiersprache: C++ / FreeBASIC
Du sprichts genau das an, was ich noch Fragen wollte: texturen.
Muss ich für das komplette VBO eine Texture verwenden?
Kann man Triangles und Quads auch in ein VBO stecken?
Wie viele VBOs kann man haben?
Wie groß darf ein VBO sein?
Registriert: Di Mai 18, 2004 16:45 Beiträge: 2623 Wohnort: Berlin
Programmiersprache: Go, C/C++
VBO ist nur ein stück Speicher, in dem man Daten hinterlegen kann, ursprünglich gedacht für Vertice-Daten.
Wenn du ein VBO zeichnen willst, dann muss man nicht das ganze VBO zeichnen, mann kann auch nur bestimmte Teile des VBO zeichnen und dies ist auch notwendig.
Da man für ein Model, Character oder ähnliches in der Regel mehrere Texturen benötigt aber es als ein Objekt sieht, kann man das ganze Mesh als ein VBO ablegen und es so sortieren, dass die Flächen(unterschiedliche Texturen) Informationen mit abspeicherst. So kannst du dann in einer Schleife dann deine Faces durchlaufen, die entsprechende Textur und Shader binden, VBO zeichnen und zum nächsten Face springen. glDrawRangeElements(mit Indices) bzw. glDrawArrays(ohne Indices) brauchst du dafür.
Quads sind deprecated und es ist empfehlenswert auf Triangles zu setzen.
Du kannst verschiedene Typen(GL_POINTS,GL_LINES,GL_TRIANGLES,GL_TRIANGLESTRIP,...) in einem VBO verwenden.
Zitat:
Wie viele VBOs kann man haben?
Gute Frage, bis der Speicher voll ist oder man die Kapazität von Integer, im positiven Bereich.
Zitat:
Wie groß darf ein VBO sein?
Gleiche Sache auch hier, wenn der Speicher alle, die Kapazität des Integers erreicht ist(ca 2GB).
Soviel wie nötig und so wenig wie möglich ^^.
Gute Größen sind z.B. 4 oder 8MB aber kannst auch andere verwenden, wichtig ist, dass du ein 32Byte Alignment einhälts(32byte,64byte,92byte,128byte,... pro Vertice Set), sonnst kannst du performance einbusen und/oder speicherverschwendung erleben.
Registriert: Di Mai 18, 2004 16:45 Beiträge: 2623 Wohnort: Berlin
Programmiersprache: Go, C/C++
Du kannst meherere Texturwechsel machen und du kannst über Shader diese auch reduzieren, indem du die Texturslots ausnutzt.
OpenGL hat nicht nur eine aktive Textur, sondern kann mindestens 4 Texturen gleichzeitig gebunden haben und glaube bis dato 16 maximum.
Nur wenn du definitiv nicht nochmal ran musst, sonnst verlierst du mit der displaylist an flexibilität.
_________________ "Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren" Benjamin Franklin
Mitglieder in diesem Forum: 0 Mitglieder und 5 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.