2017-08-30 5 views
1

Ich habe Probleme mit Textur Transparenz in OpenGL. Wie Sie auf dem Bild unten sehen können, funktioniert es nicht ganz. Es ist erwähnenswert, dass das Schwarz tatsächlich die ClearColor ist, die ich benutze, um den Bildschirm zu löschen.OpenGL: Transparente Textur Problem

enter image description here

Ich verwende den folgenden Code ein Mischen zu implementieren:

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

Hier ist mein Fragment-Shader:

#version 330 core 

in vec2 tex_coords; 

out vec4 color; 

uniform vec4 spritecolor; 
uniform sampler2D image; 

void main(void) 
{ 
    color = spritecolor * texture(image, tex_coords); 
} 

Hier ist ein Screenshot von der Szene in Drahtgitter-Modus, falls es hilft mit den gezeichneten Eckpunkten:

Scene in Wireframe mode

Wenn noch etwas benötigt wird, zögern Sie nicht zu fragen, ich werde es hinzufügen.

+0

Sie haben zunächst die undurchsichtigen Objekte zu zeichnen. Die transparenten Objekte müssen nach dem umgekehrten Abstand zur Kameraposition sortiert werden. (Betrachten Sie den Tiefentest) – Rabbid76

+0

Ja, das war's! Könnten Sie Ihren Kommentar als Antwort hinzufügen, damit ich ihn akzeptieren kann? – AProgrammer

Antwort

3

Sie haben eine Transparency Sorting

zu tun Wenn eine Szene gezogen wird, in der Regel der Tiefentest (glDepthFunc) auf GL_LESS gesetzt. Dies bewirkt, dass Fragmente nur dann gezeichnet werden, wenn sie sich vor der Szene befinden, die bisher gezeichnet wurde.

Um Transparente richtig zu zeichnen, müssen Sie zunächst die undurchsichtigen Objekte zeichnen. Die transparenten Objekte müssen nach dem umgekehrten Abstand zur Kameraposition gezeichnet werden. Um Transparente richtig zeichnen zu können, müssen Sie zuerst die opaken Objekte zeichnen. Die transparenten Objekte müssen nach dem umgekehrten Abstand zur Kameraposition sortiert werden.
Zeichnen Sie zuerst das transparente Objekt, das den größten Abstand zur Kameraposition hat, und zeichnen Sie zuletzt das transparente Objekt, das den geringsten Abstand zur Kameraposition hat.

Siehe auch die Antworten auf die folgenden Fragen: