OpenGL - So erstellen Sie auftragsunabhängige Transparenz?

Ich habe zu Lernzwecken an einer Spiele-Engine gearbeitet und bin auf dieses Problem gestoßen. Ich kann anscheinend keine Antwort finden für:

Alpha-Kanal funktioniert nur für Objekte, die bereits vor dem Objekt mit dem Alpha-Kanal @ gezeichnet wurde (Zum Beispiel: in einer Szene mit 3 Objekten sagen wir eine Katze, einen Hund und eine Flasche (transparent). Sowohl die Katze als auch der Hund befinden sich hinter der Flasche; der Hund wird zuerst gezeichnet, die Flasche als zweites, die Katze als drittes Nur der Hund ist durch die Flasche zu sehe

Hier ist ein Bild von diesem Problem:

Ich habe C ++ für die Engine, Win32 API für den Editor und GLSL für die Schattierung verwendet:

// some code here
vec4 alpha = texture2D(diffuse, texCoord0).aaaa;
vec4 negalpha = alpha * vec4(-1,-1,-1,1) + vec4(1,1,1,0);

vec4 textureComponentAlpha = alpha*textureComponent+negalpha*vec4(1,1,1,0);//(texture2D ( diffuse, texCoord0 ) ).aaaa;

gl_FragColor = (textureComponentAlpha + vec4(additiveComponent.xyz, 0)) * vec4(lightingComponent.xyz, 1);

In C ++:

glEnable(GL_ALPHA_TEST);
glDepthFunc(GL_EQUAL);

glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

Ich nehme an, es hat etwas mit der Art und Weise zu tun, wie der Alpha-Test durchgeführt wird.

Kann mir jemand helfen, das zu beheben?

Antworten auf die Frage(6)

Ihre Antwort auf die Frage