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

Aktuelle Zeit: So Jul 13, 2025 03:27

Foren-Übersicht » Programmierung » Einsteiger-Fragen
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 23 Beiträge ]  Gehe zu Seite Vorherige  1, 2
Autor Nachricht
 Betreff des Beitrags:
BeitragVerfasst: Di Apr 28, 2009 12:34 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Unser Wiki bietet zu den meisten Funktionen die Infos, welcher Fehler welche Ursache hat.
Tak hat darau ja schon hingewiesen.

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Apr 28, 2009 12:56 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Dez 03, 2008 12:01
Beiträge: 167
Wohnort: /country/germany
Programmiersprache: C++ / FreeBASIC
ok danke, den Fehler hab ich stundenlang nicht gefunden.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Apr 29, 2009 11:08 
Offline
DGL Member
Benutzeravatar

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

Auf jeden Fall vielen Dank!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Apr 29, 2009 14:34 
Offline
DGL Member
Benutzeravatar

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

Projekte: https://github.com/tak2004


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Apr 29, 2009 17:12 
Offline
DGL Member
Benutzeravatar

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?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Apr 30, 2009 02:39 
Offline
DGL Member
Benutzeravatar

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.

z.B.:
Vertex=float x,y,z(12Byte)
Color=float r,g,b(12Byte)
TexCoord=float u1,v1(8Byte)
Summe=32Byte

Wenn du für Vertice,Color,Texcoord und so weiter jeweils ein Buffer nimmst, dann gilt dies nicht.

_________________
"Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren"
Benjamin Franklin

Projekte: https://github.com/tak2004


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Apr 30, 2009 09:40 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Dez 03, 2008 12:01
Beiträge: 167
Wohnort: /country/germany
Programmiersprache: C++ / FreeBASIC
also funktioniert es nicht das ich den Texturen-Wechsel ins VBO einbau.
Macht es Sinn die Zeichenroutinen für das VBO in eine Displayliste zu stecken?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Apr 30, 2009 11:47 
Offline
DGL Member
Benutzeravatar

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

Projekte: https://github.com/tak2004


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


Wer ist online?

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.

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