Альфа-маски с OpenGL

Я хочу использовать альфа-маску в OpenGL так, чтобы белый (1) =visible и черный (0) =hidden.

Таким образом, то, что я делаю, я пишу что-то в альфа-компоненте использования кадрового буфера glColorMask(False, False, False, True) (Я использую Python, Вы видите), и затем потяните некоторую геометрию выше его смешивание использования.

Но это не работает: Я пытался заполниться, альфа буферизуют completly с 0 и затем тянуть некоторую геометрию, которая не должна таким образом быть видима. Но это всегда обнаруживается, альфа-буфер является проигнорированным completly.

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

(Да, матрицы проекции являются правильными так мои экранные диапазоны от 0/0 до 320/240.)

Треугольник не должен быть видим, что я делал неправильно?

5
задан abenthy 25 January 2010 в 19:26
поделиться

2 ответа

Попробуйте спросить буфере альфа , когда вы создаете контекст GL, если вы еще не найдете.

3
ответ дан 15 December 2019 в 06:26
поделиться

Использование Glalphafunc (GL_GREATER , 0,5);

0
ответ дан 15 December 2019 в 06:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: