Ich mache grundlegende Objekttransparenz mit Tiefensortierung. Als Tiefe verwende ich die Entfernung (quadriert) von der Kamera zu jedem Zentrum der Dreiecke des Modells, was ich als {(x1 + x2 + x3) / 3, (y1 + y2 + y3) / 3, (z1 + z2 + z3) / 3}. Obwohl das Ergebnis fast gut ist, aber es gibt einige Fehler.
Affenkopf ohne zu sortieren
mit Sortieren
Kann ich etwas gegen diese Fehler unternehmen?
Es gibt keine Möglichkeit, die Dreiecke perfekt zu sortieren. Sehen Sie sich die Beispiele am Ende des Artikels Transparenzsortierung im opengl.org-Wiki an.
@kos: Werfen Sie einen Blick auf Auftragsunabhängige Transparenz mit Dual Depth Peeling und Alpha zum Coverage .
Wenn Sie nicht über die Rasterausrichtung der Partikel verfügen, ist das Sortieren beliebiger Dreiecke wirklich ziemlich schwierig. Für ein perfektes Ergebnis müssen Sie beginnen, Dreiecke aufzuteilen.
Wie @tibur sagt, können Sie mit einigen einfachen Näherungen davonkommen, aber auftragsunabhängige Transparenz (OIT) ist auch eine anständige Lösung. Es erfordert jedoch OpenGL 3 Ära Grafikfunktionen. Ich habe eine Implementierung auf github verfügbar , die einige Möglichkeiten zeigt, genau OIT ziemlich schnell zu machen.
Es lohnt sich, sich die adaptive Transparenz anzusehen, multilayer alpha blending "und" hybride Transparenz ". Dies sind schnelle Näherungslösungen, aber liefern sehr gute Ergebnisse für allgemeine Szenen.
Einige ähnliche Fragen ...
Mathematisch ausgedrückt, wenn Sie etwas über den Körper wissen, könnte es beim Sortieren helfen.
Zum Beispiel können die Flächen eines Würfels nur nach Barycenter (Flächenmitte) sortiert werden. Wenn die Mitte der quadratischen Fläche A näher als die Mitte von B ist, wird B niemals einen Teil vor A haben (wiederum für einen Würfel.)
Tatsächlich können Flächen für einen konvexen Körper nach Ausrichtung sortiert werden.
Tags und Links opengl sorting transparency