Frustum Culling mit VBOs

8

In meinem Projekt wird Terrain mit VBOs in OpenGL gerendert. Ich möchte etwas Frustum Culling anwenden, habe aber keine Ahnung, wie ich auf jedes gezeichnete Polygon zugreifen soll, um zu überprüfen, ob es in Sicht ist. Ich denke, hier kommen Octrees ins Spiel, aber ich habe keine Ahnung, wie das wirklich gemacht wird. Kennt jemand ein gutes Tutorial, wie man diese spezielle Sache macht oder hat er einen Pseudocode für mich?

Danke im Voraus!

Krankzinnig
quelle

Antworten:

3

Weitere Informationen zum Speichern der Geländedaten finden Sie hier. Lagern Sie es Brocken? Bauen Sie die VBOs ständig neu auf? Befindet sich das gesamte Gelände in einem VBO und Sie rendern jeweils Teile davon?

Der Versuch, pro Polygon auszusortieren, führt wahrscheinlich zu mehr Overhead als es spart. Je größer ein Stück Gelände ist, das Sie sofort testen können, desto schneller wird das Keulen mit dem offensichtlichen Kompromiss zwischen Genauigkeit. Am Ende müssen Sie einige Profile erstellen, um herauszufinden, wo der optimale Punkt für diesen Kompromiss liegt. Daher ist es sehr hilfreich, ein System zu erstellen, mit dem Sie die Aufteilung Ihres Geländes dynamisch ändern können.

Jason Morales
quelle
1

Eine GPU kann die Polygone bereits pro Polygon ausmerzen. Dies geschieht jedoch zum Zeitpunkt der Rasterung / Einrichtung, der nach der Scheitelpunktschattierung erfolgt (mithilfe von Vertex- / Geometrie- / Rumpf- / Domänen-Shadern). Dies bedeutet, dass die GPU immer noch Polygonscheitelpunkte schattieren kann, die dann ausgesondert werden. In diesem Fall hat die GPU viel Arbeit für nichts geleistet und ist daher eine Verschwendung von GPU-Zyklen.

Aus diesem Grund versuchen wir, GPU-Zyklen nicht zu verschwenden, indem wir unsichtbare Geometrie auf der CPU-Seite (oder GPU-Seite mit DX10 + -Funktionen wie DrawIndirect und / oder prädiziertem Rendering) in Polygonstapeln ausmerzen, indem wir für diese Stapel einfach keine Zeichnung aufrufen.

Normalerweise kann dieser Stapel von Polygonen durch eine Kugel oder ein Kästchen dargestellt werden, das alle diese Polygone umgibt. Diese Begrenzungskugel / Box wird dann gegen den Kegelstumpf getestet, und wenn sie den Kegelstumpf berührt, wird der Ziehungsaufruf für diese Polygone aufgerufen. Wenn nicht, wird der Draw-Aufruf übersprungen. Ein Octree ist einfach eine andere Möglichkeit, um zu bestimmen, welche Geometriestapel sichtbar sind, außer dass diese Daten hierarchisch organisiert werden. Oktrees sind nicht unbedingt für alle Geometrien geeignet.

Es folgen einige ziemlich gute Referenzen, die die Kugel / Kegelstumpf-Technik erklären:

jpaver
quelle