Frage

Ich bin nicht ganz sicher, ob ich tun kann, was ich hier will, aber ich habe eine Reihe von Objekten in OpenGL gemacht zu werden (mit JOGL). Für eine Gruppe von Objekten, mag ich sicherstellen, dass bestimmte Objekte in dieser Gruppe vor anderen Objekten in der Gruppe wiedergegeben werden. Ich habe versucht, den Tiefenpuffer Bit Clearing- und Rendern die „Front“ Objekte zuletzt, und das funktioniert, außer es andere Tiefenpufferung auf dem Bildschirm vermasselt.

Was es kommt darauf an, ich habe eine Liste von Objekten gemacht zu werden, und ich mag, dass bestimmte Objekte in dieser Liste, um sicherzustellen, vor anderen Objekten gerendert werden (sie sind alle auf der gleichen Z-Koordinate obwohl). Gibt es eine Möglichkeit, das zu tun?

Danke, Jeff

War es hilfreich?

Lösung

Dies ist eine sehr verbreitete Technik transparente Objekte zu zeichnen (Objekte, die Teile mit Alpha haben! = 1).

Der häufigste Ansatz ist es, zuerst zu bauen ein Baum von Objekten gezogen werden, dass man dann sortieren entlang in den „Tiefen“, nachdem sie durch die Projektion * Kamera Matrizen geleitet wird. Im Grunde genommen, anstatt nur blind Dreiecke auf der GPU zu werfen, senden Sie Ihre Objekte eins nach dem anderen, wie Sie sie in der Welt zu einem temporären Puffer sind zu verarbeiten. Diese Objekte haben Kenntnis von jedem Dreieck und jede Ecke Farbe / Vertex-Shader / Texturname + id usw. Dann können Sie Ihre Puffer sortieren (entweder naiv, Objekt für Objekt, oder eine vollständige geblasen Art basierend auf ähnlichen Patches über Objekte).

Der glDepthMask Trick, wenn ich mich richtig erinnere, etwas geht:

glDepthMask(true);
drawOpaqueObjects();
glDepthMask(false);
drawTransparentObjects();

Für die besten Ergebnisse die transparenten Objekte werden wieder nach vorne sortiert, aber in den meisten (einfach) Anwendungen dies egal ist.

edit: beachten Sie, dass für die zweite Technik, während Sie aktivieren und deaktivieren Tiefenpuffer schreiben, verwenden Sie noch Tiefenpuffer TESTS, so transparente Objekte hinter dem normalen Objekten (einen Helm zeigen „in“ der Bildschirm zum Beispiel) gewonnen‘ t gezogen bekommen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top