Einzelnen Beitrag anzeigen

oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#1

VBO's in OpenGL verwenden

  Alt 14. Mär 2013, 16:48
Hallo Leute,

leider hat mir die Suche auch nicht weiter helfen können. Aus diesem Grund hier meine Frage als neuer Thread. Ich habe folgende Ausgangsbedingungen.

In meinem Projekt können mehrere Objekte angelegt werden, die dann in OpenGL gezeichnet werden sollen. Diese Objekte sind geometrische Objekte, Punkte, Dreiecke ... bis zu NURBS. Zusätzlich ist die Darstellung der Objekte mit diversen Eigenschaften versehen wie Visible, Punkt- und Linienstärke, Farbe, Transparenz, zeichnen als Wireframe, solid usw.

Da die Anzahl der Objekte oder die pro Objekt zu zeichnenden Punkte (hier mehrere 100.000) dazu führt, dass das Rendern auf dem Bildschirm unansehnlich wird möchte ich VBO's (Vertex Buffer Objects) verwenden.

Die grundsätzliche Benutzung von VBO's ist mir klar. Leider sind alle Tutorials die ich gefunden habe jedoch so aufgebaut, dass es nur um das Zeichnen einer Punktmenge geht. Also x-Anzahl Punkte, zeichen als vermaschte Dreiecke usw.

Bei mir ist es jedoch so, dass jedes Objekt für sich eigene Ansprüche an das Zeichnen hat. Zuerst dachte ich, dass ich für jedes Objekt einen eigenen Vertex Buffer anlege. Also jedes Object hat eine Eigenschaft vBO für die dann glGenBuffer aufgerufen wird. Nach dem Motto, 5 Objekte, also 5 mal glGenBuffer. Das scheint aber so nicht zu gehen. Mann kann wohl mehrere Buffer anlegen, aber dass dann nur in einem Rutsch in glGenBuffer. Als nächstes kommt glEnableBuffer. Hier stellt sich jetzt bei mir die Frage, kann ich das für jedes Objekt einzeln machen. Ich hab den Eindruck nein, da ich für glDrawArrays als Parameter nicht explizit eine BufferID angeben kann. Zusätzlich ist das Zeichnen in unterschiedlichen Modi, dass eine Objekt mittels linestrip, dass andere mittels triangle usw. nicht möglich.

Okay, ich denke man sieht deutlich, dass ich keinen Plan habe, wie das wirklich funzt.

Gibt es jemanden, der mir mal kurz erklären kann wie ich das aufbauen muss. Ich dachte an die Implementierung eines "DrawObservers" der die ganzen Sachen managed. Ist bei meinem Projekt nicht gerade wenig Aufwand und bevor ich damit anfange frag ich lieber noch mal.


Schon mal Dank und liebe Grüße

oki
42
  Mit Zitat antworten Zitat