Frage

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

Also, was ich tue, ist ich etwas in der Alpha-Komponente des Framebuffer mit glColorMask(False, False, False, True) schreiben (ich bin mit Python, Sie sehen) und dann einige Geometrie ziehen darüber Blending.

Aber es funktioniert nicht: Ich habe versucht, die alpha komplett mit 0 Puffer füllen und dann einige Geometrie zeichnen, die somit nicht sichtbar sein sollte. Aber es zeigt sich immer, wird der Alpha-Puffer 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 recht so mein Bildschirm reicht von 0/0 bis 320/240.)

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

War es hilfreich?

Lösung

Versuchen Sie für einen fragen alpha Puffer beim Erstellen Ihr GL Kontext, wenn Sie nicht bereits.

Andere Tipps

Verwendung glAlphaFunc (GL_GREATER, 0,5);

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top