使用Alpha测试进行Opengl选择

时间:2009-07-27 18:43:29

标签: opengl selection textures

从我在互联网上看到的情况来看,我的方法无法真正解决这个问题。

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

有没有办法在选择模式下启用alpha测试?

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

看起来glReadPixels就是你要找的东西

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

使用类似:

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