5 Stimmen

Alpha-Masken mit OpenGL

Ich möchte eine Alpha-Maske in OpenGL zu verwenden, so dass weiß (1) = sichtbar und schwarz (0) = versteckt.

Ich schreibe also etwas in die Alpha-Komponente des Framebuffers mit glColorMask(False, False, False, True) (Ich benutze Python, sehen Sie) und dann zeichnen einige Geometrie über sie mit Blending.

Aber es funktioniert nicht: Ich habe versucht, den Alphapuffer komplett mit 0 zu füllen und dann eine Geometrie zu zeichnen, die so nicht sichtbar sein sollte. Aber es wird immer angezeigt, der Alphapuffer wird komplett ignoriert.

# 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()

(Ja, die Projektionsmatrizen sind richtig, so dass mein Bildschirm von 0/0 bis 320/240 reicht).

Das Dreieck sollte nicht sichtbar sein, was habe ich falsch gemacht?

3voto

genpfault Punkte 49237

Fragen Sie nach einem Alpha-Puffer wenn Sie Ihren GL-Kontext erstellen, wenn Sie es nicht bereits tun.

0voto

joeld Punkte 27698

Verwenden Sie glAlphaFunc( GL_GREATER, 0.5 );

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X