OpenGL Tutorial (Version 3.3) – LOD-Stufen für ein 3D-Modell erzeugen (Download)

Im heutigen OpenGL-Programmbeispiel wird ein Verfahren vorgestellt, mit dessen Hilfe sich bei Programmstart für ein gegebenes 3D-Modell eine beliebige Anzahl von LOD-Stufen (Level Of Detail) erzeugen lässt. Mit jeder neuen LOD-Stufe wird die Anzahl der Dreiecksflächen schrittweise reduziert – durch einen Kollaps der Dreieckskanten (edge collapse):


Vor der Durchführung eines Kantenkollaps muss jedoch zunächst geklärt werden, inwieweit der Kollaps die Modell-Geometrie intakt lässt. Im obigen Beispiel bieten sich zwar mehrere Kanten an, deren Kollaps die quadratische Geometrie nicht verändern würde, die Kante (v2 v5) ist jedoch am besten geeignet, denn hier spielt es keine Rolle, ob man nun Vertex 2 oder Vertex 5 aus dem Indexbuffer entfernt.
Die Kanten eines 3D-Modells unterscheidet man sinnvollerweise nach der Anzahl der Dreiecksflächen, welche durch die jeweilige Kante begrenzt werden. Man spricht hier auch von der so genannten Seitigkeit. Begrenzt eine Kante nur eine einzige Dreiecksfläche, so spricht man von einer einseitigen Kante (1 side edge), begrenzt eine Kante zwei Dreiecksflächen, dann spricht man von einer zweiseitigen Kante (2 side edge), usw.
Aus der obigen Abbildung lassen sich nun die beiden Bedingungen für einen möglichen Kantenkollaps ableiten:


  • Eine kollabierende Kante muss zweiseitig sein.
  • Die Eckpunkte einer Kante müssen ebenfalls Eckpunkte weiterer zweiseitiger (und nur zweiseitiger) Kanten sein.

Unser Verfahren sucht nun im ersten Schritt nach allen Kanten, die für einen möglichen Kollaps infrage kommen und legt zudem die Anzahl der Kantenkollapse pro LOD-Stufe fest (je mehr LOD-Stufen erzeugt werden sollen, desto weniger Kantenkollapse müssen pro Stufe durchgeführt werden). Damit die Modell-Geometrie nach einem Kollaps so gut wie möglich intakt bleibt, wird vor jedem Kollaps zunächst die kürzeste infrage kommende Kante gesucht. Nachdem alle für eine LOD-Stufe vorgesehenen Kantenkollapse durchgeführt worden, wird schließlich der Indexbuffer aktualisiert.

Hinweis:
LOD freundliche 3D-Modelle Die Art und Weise, wie 3D-Modelle entworfen werden, hat einen nicht unerheblichen Einfluss auf die Qualität der LOD-Stufen. Das Basis-Mesh (niedrigste LOD-Stufe) sollte sich wenn möglich aus einzelnen Basis-Bauteilen zusammensetzen, deren Details nicht weiter reduziert werden können. Im zweiten Schritt lassen sich die zusätzlichen Details dann in die Basis-Bauteile integrieren.

Beispiele:
  • kugelförmige Objekte => Würfel, Doppelpyramide (Basisbauteil) 
  • Antenne => Pyramide (Basisbauteil) 
  • Rad => Quader (Basisbauteil)
  • Kegel => Pyramide (Basisbauteil)

Hinweis:
Für die Ausführung dieses Programmbeispiels muss der Treiber Ihrer Grafikkarte die OpenGL Version 3.3 unterstützen.

Visual C++ 2010: DemoWithOpenGL2010_Tut19