Question

Je souhaite utiliser un masque alpha dans OpenGL de sorte que le blanc (1) = visible et noir (0) = caché.

Alors, ce que je fais est que j'écrire quelque chose dans le composant alpha du framebuffer en utilisant glColorMask(False, False, False, True) (j'utilise python, vous voyez), puis dessine une géométrie au-dessus en utilisant le mélange.

Mais il ne fonctionne pas: J'essayé de remplissage du tampon d'alpha complètement avec 0, puis en tirant une géométrie qui ne doit pas être ainsi visible. Mais il montre toujours, la mémoire tampon alpha est ignoré complètement.

# Clear alpha buffer to 0, and clear color buffer.
# After this, the alpha buffer should probaby be filled with 0.
glClearColor(0, 0, 0, 0)
glClear(GL_COLOR_BUFFER_BIT)

# Disable blending.
glDisable(GL_BLEND)

# Disable color writing.
glColorMask(False, False, False, True)

# Set color to a white with alpha 0.
glColor4f(1, 1, 1, 0)

# Now draw a fullscreen quad.
# After this, the alpha buffer should really be filled with 0.
# Shouldn't it?
glBegin(GL_QUADS)
glVertex2f(0, 0)
glVertex2f(320, 0)
glVertex2f(320, 480)
glVertex2f(0, 480)
glEnd()

# Enable color writing.
glColorMask(True, True, True, True)

# Enable blending so that incoming fragments are multiplied
# by alpha values already in the buffer.
glEnable(GL_BLEND)
glBlendFunc(GL_DST_ALPHA, GL_ONE)

# Set color to a white with alpha 1.
glColor4f(1, 1, 1, 1)    

# Now draw a triangle.
# It should not be visible because alpha in framebuffer is 0
# and 0 * 1 = 0.
glBegin(GL_TRIANGLES)
glVertex2f(20, 50)
glVertex2f(300, 50)
glVertex2f(160, 210)
glEnd()

(Oui, les matrices de projection sont droite pour mon écran varie de 0/0 à 320/240.)

Le triangle ne doit pas être visible, qu'ai-je fait de mal?

Était-ce utile?

La solution

Essayez de demander un tampon alpha lorsque vous créez votre contexte de GL, si vous n'êtes pas déjà.

Autres conseils

Utilisation glAlphaFunc (GL_GREATER, 0,5);

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top