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

Aktuelle Zeit: Sa Jul 19, 2025 21:30

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



Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Doppelte VBO Daten vermeiden
BeitragVerfasst: Di Nov 17, 2009 20:33 
Offline
DGL Member
Benutzeravatar

Registriert: Di Apr 29, 2008 18:56
Beiträge: 1213
Programmiersprache: Delphi/FPC
HI,

wie vlt einige von euch schon gesehen haben entwickel ich grad mein WormHoleSurfer weiter. Und um den Speicherverbrauch und die Rechenleistung zu senken will ich die doppelten Daten aus meinem VBO löschen.
Bis jetzt hab ich die Daten einfach so wie ich sie auch zeichnen würde in das VBO beschrieben und dann mit glDrawArrays die Vertecs gezeichnet. Jetzt hab ich alle doppelten Vertecs im VBO entfernt und versuch mit glDrawElements die Vertecs zu zeichnen. Ich weiß aber nich genau wie ich glDrawElements benutzen muss, was genau muss in dem Array stehen?

MfG Bergmann.

_________________
Aktuelle Projekte: BumpMapGenerator, Massive Universe Online
Auf meiner Homepage gibt auch noch paar Projekte und Infos von mir.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Doppelte VBO Daten vermeiden
BeitragVerfasst: Di Nov 17, 2009 21:18 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Es gibt zwei Arrays. Im ersten Array (dem Array-Buffer) sind die Vertices. Im zweiten Array (dem Element-Buffer) sind die sogenannten Indizes. Dabei sind Indizes Verweise auf Vertices im Array-Buffer, genauer gesagt die Position im Array, also einfache Integer (meist 16 oder 32bit unsigned) Im Element-Buffer stehen diese Verweise in der gleichen Reihenfolge wie sie bei dir bisher im VBO waren. Nur du speicherst eben nicht den ganzen Vertex, sondern nur einen Verweis. Die Datenmenge lässt sich damit ungefähr auf ein Sechstel reduzieren, auch das Ergebnis des Vertexshaders kann gecacht werden. (näheres zu dieser Einsparung im Artikel Mesh)

Ein Beispiel gibt es sicher irgendwo im Wiki, ansonsten einfach nochmal fragen.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Doppelte VBO Daten vermeiden
BeitragVerfasst: Mi Nov 18, 2009 00:01 
Offline
DGL Member
Benutzeravatar

Registriert: Di Apr 29, 2008 18:56
Beiträge: 1213
Programmiersprache: Delphi/FPC
Aha, alles klar....
habs jetzt hin bekommen. Aber bei mir is es nur n 4tel weniger. Aber das 6tel is ja sicherlich bloß so der Durchschnittswert, oder?

MfG Bergmann

_________________
Aktuelle Projekte: BumpMapGenerator, Massive Universe Online
Auf meiner Homepage gibt auch noch paar Projekte und Infos von mir.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Doppelte VBO Daten vermeiden
BeitragVerfasst: Mi Nov 18, 2009 09:49 
Offline
DGL Member

Registriert: Sa Mär 14, 2009 17:48
Beiträge: 99
Programmiersprache: D, Java, C++
Bergmann89 hat geschrieben:
Aha, alles klar....
habs jetzt hin bekommen. Aber bei mir is es nur n 4tel weniger. Aber das 6tel is ja sicherlich bloß so der Durchschnittswert, oder?


Ich vermute das kommt darauf an, ob du Triangles oder Quads, oder ... nutzt, denn gehen wir mal von folgendem Mesh aus:

Bild

Der rot markierte Punkt läge ohne Indizes sogar 8 mal im VBO, mit Indizes nurnoch 1 mal und bei allen anderen Punkten kommen wir von 2 auf 1 mal.

Vorher: 8 * 3 = 24 Vertizes
Nachher: 9 Vertizes

Da haben wir ordentlich eingespart, und wenn das ganze teil jetzt größer wäre würden wir die Reduzierung von 8 auf 1 Vertex viel häufiger haben und somit wäre der Gewinn umso größe.

Bei Quads fällt das natürlich kleiner aus, bestünde das Mesh aus 4 Quads würden wir in der Mitte "nur" von 4 auf 1 Vertex kommen.

Da ich vermute, dass du Quads im VBO hast ist dein Gewinn also nicht ganz so groß, allerdings kannst du ohne weiteren Platzbedarf im VBO aus den Quads Triangles machen ;).

Grüße,
Skeptiker


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Doppelte VBO Daten vermeiden
BeitragVerfasst: Mi Nov 18, 2009 11:10 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Zitat:
Aber das 6tel is ja sicherlich bloß so der Durchschnittswert, oder?

Da dies das Einsteiger-Forum ist....kurze Antwort:
ja, ein Durchschnittswert für "vernünftige", zusammenhängende Dreiecksmeshes mit einigen tausend Faces oder mehr. :)

lange Antwort:
In einem geschlossenen und 2-mannigfaltigen Dreiecksmesh mit vernachlässigbar kleinem Genus wird ein einzelner Vertex im Durchschnitt von ungefähr 6 Faces verwendet. Wenn der Genus 1 ist, sind es sogar genau 6 Faces im Durchschnitt. Wenn Vertices im Vergleich zu Indices also "groß" sind sparst du etwas weniger als 5/6 der Daten ein. (Die genannten Eigenschaften sind im Artikel Mesh ausführlich erklärt)

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
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.007s | 14 Queries | GZIP : On ]