2017-08-30 5 views
1

J'ai des problèmes de transparence de texture dans OpenGL. Comme vous pouvez le voir sur l'image ci-dessous, ça ne marche pas vraiment. Il est à noter, que le noir est en fait le ClearColor, que j'utilise pour effacer l'écran.OpenGL: problème de texture transparente

enter image description here

J'utilise le code suivant pour mettre en œuvre le mélange:

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

Voici mon 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); 
} 

Voici une capture d'écran de la scène en mode wireframe, en cas il aide avec les vertices dessinés:

Scene in Wireframe mode

Si vous avez besoin d'aide, n'hésitez pas à me contacter, je l'ajouterai.

+0

Vous avez pour dessiner les objets opaques en premier. Les objets transparents doivent être dessinés après, triés par la distance inverse à la position de la caméra. (Considérez le test de profondeur) – Rabbid76

+0

Oui, ça l'a fait! Pourriez-vous ajouter votre commentaire en guise de réponse, pour que je puisse l'accepter? – AProgrammer

Répondre

3

Vous devez faire un Transparency Sorting

Si une scène est tirée, généralement le test de profondeur (glDepthFunc) est réglé sur GL_LESS. Cela provoque des fragments à dessiner seulement quand ils sont en face de la scène jusqu'ici dessinée.

Pour dessiner des transparents correctement, vous devez d'abord dessiner les objets opaques. Les objets transparents doivent être dessinés après, triés par la distance inverse à la position de la caméra. Pour dessiner les transparents correctement, vous devez d'abord dessiner les objets opaques. Les objets transparents doivent être dessinés après, triés par la distance inverse à la position de la caméra.
Dessinez d'abord l'objet transparent qui a la plus grande distance jusqu'à la position de la caméra et dessinez l'objet transparent en dernier, qui a la plus petite distance jusqu'à la position de la caméra.

Voir aussi les réponses aux questions suivantes: