2017-04-06 2 views
0

Ich habe eine Szene, die sowohl undurchsichtige als auch transparente Objekte enthält. Ich spalte sie in zwei Gruppen, opak und transparent, und sortiere die Opaque von vorne nach hinten und die transparente von hinten nach vorne. Ich schalte die Tiefenpufferschreibvorgänge und den Tiefentest ein und zeichne die undurchsichtigen Elemente von vorne nach hinten. Dann deaktiviere ich die Tiefenschreibvorgänge, halte den Tiefentest eingeschaltet und zeichne die transparenten Objekte von hinten nach vorne.Auftrag unabhängige Transparenz in opengl

Das alles funktioniert gut, aber von dem, was ich verstehe, könnte ich transparente Elemente ohne eine bestimmte Reihenfolge zeichnen. Ich habe Artikel wie diesen durchgesehen http://www.openglsuperbible.com/2013/08/20/is-order-independent-transparency-really-necessary/ und sah, dass Reihenfolge unabhängige Transparenz erreicht werden kann, indem Sie die Blending-Funktion ändern ... Aber ich kann das nicht wirklich verstehen.

Ich habe versucht, mit den Mischungen Gleichungen, die dort vorgeschlagen, aber ich bekomme die falsche kombinierte Farbe für die transparenten Elemente, die sich überlappen, es sei denn, ich verwende die üblichen (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA). Ist das wirklich so einfach wie es dort aussieht? Fehle ich gerade etwas einfaches?

+0

Mögliche Duplikate von [OpenGL - So erstellen Sie Order-unabhängige Transparenz?] (Http://StackOverflow.com/Questions/37780345/Opengl-how-to-Create-order-independent-transparency) – Vallentin

+1

Ist dies für Desktop-OpenGL oder OpenGL ES? –

+1

Haben Sie auch den Teil dieses Dokuments gelesen, der über "When Order Matters" spricht? –

Antwort

0

"Auftrag unabhängige Transparenz kann durch Ändern der Blending-Funktion erreicht werden ... Aber ich kann das nicht wirklich verstehen."

Ich denke, das ist, wo Ihr Missverständnis liegt.

Es ist nicht der Fall, dass eine auftragsunabhängige Transparenz durch Ändern der Mischfunktion erreicht werden kann. Es ist nur so, dass einige Mischfunktionen intrinsisch ordnungunabhängig sind.

Die beiden üblichen auftragsunabhängigen Mischfunktionen sind additiv (GL_ONE, GL_ONE) und multiplikativ (GL_DST_COLOR, GL_ZERO). Aber wenn das nicht die richtigen Mischfunktionen für Ihre Situation sind (und normalerweise nicht), dann müssen Sie entweder relativ teure und komplizierte auftragsunabhängige Transparenzlösungen wie den im Artikel erwähnten A-Puffer entweder sortieren oder verwenden verlinkt.