回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我想在OpenGL中使用alpha蒙版,这样白色(1)=可见,黑色(0)=隐藏。在</p>
<p>所以我要做的是使用<code>glColorMask(False, False, False, True)</code>在帧缓冲区的alpha组件中写一些东西(你看,我使用的是python),然后使用混合在上面绘制一些几何体。在</p>
<p>但它不起作用:
我尝试用0填充alpha缓冲区,然后绘制一些不可见的几何图形。但它总是出现,alpha缓冲区被完全忽略了。在</p>
<pre><code># 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()
</code></pre>
<p><em>(是的,投影矩阵是正确的,所以我的屏幕范围从0/0到320/240。)</em></p>
<p>三角形不应该是可见的,我做错了什么?在</p>