2009-07-27 34 views
0

从我在互联网上看到的情况来看,这个问题不能用我的方法真正解决。用Alpha测试Opengl选择

我目前正在编写一个程序,使用选择缓冲区通过场景中的所有对象。然而,其中一个对象是其中很大一部分具有alpha 0的纹理。它在渲染时工作良好,不显示alpha值,但在选择模式下,跳过alpha测试并将鼠标悬停在上方透明区域选择对象而不是其后面的任何东西。

有什么办法可以在选择模式下启用alpha测试吗?

回答

1

我想你的意思是alpha混合将被跳过。我没有对它进行测试,但从here的评论中可以看出,alpha测试仍然在GL_SELECT模式下使用。所以你会想glEnable(GL_ALPHA_TEST),然后使用glAlphaFunc()来设置你的阈值多少alpha构成一个命中。要在盲目地尝试选择这些对象之前进行测试,只需渲染它即可。你会看到OpenGL只渲染你的多边形的一部分;任何部分将构成点击,而任何未绘制的部分将不会被您的GL_SELECT命中。

请评论,让我知道它是如何工作的。如果你仍然无法使用它,我可以花时间为你写一个测试用例,但是如果你能独立使用它,我宁愿不花时间。 :)

另外,作为参考,the OpenGL docs for Alpha testthe manpage for glAlphaFunc

0

看起来glReadPixels是你在找什么

http://www.opengl.org/sdk/docs/man/xhtml/glReadPixels.xml

使用类似:

glReadPixels (0, 0, XSCREEN, YSCREEN, GL_ALPHA, GL_UNSIGNED_BYTE, buffer); 
+0

这有什么用?我不想知道缓冲区中的内容,我只是希望代码不会返回任何东西,如果它是鼠标下的空白区域。 – 2009-07-27 19:35:06