从我在互联网上看到的情况来看,我的方法无法真正解决这个问题。
我目前正在编写一个程序,该程序使用选择缓冲区传递场景中的所有对象。但是,其中一个对象是纹理,其中很大一部分具有 alpha 0。它在渲染时工作正常,不显示 alpha 值,但在选择模式下,会跳过 alpha 测试,并将鼠标悬停在透明区域选择对象而不是它后面的任何东西。
有没有办法在选择模式下启用 alpha 测试?
我认为您的意思是跳过了 alpha 混合。我还没有测试它,但从这里的评论中可以看出,alpha 测试仍然在 GL_SELECT 模式下使用。所以你会想要 glEnable(GL_ALPHA_TEST) 然后使用 glAlphaFunc() 来设置你的阈值,以确定多少 alpha 构成命中。要在盲目尝试选择这些对象之前进行测试,只需渲染它。你会看到 OpenGL 只渲染你的多边形的一部分;并且该部分中的任何部分都将构成一次点击,而任何未绘制的部分都不会被您的 GL_SELECT 击中。
请发表评论,让我知道结果如何。如果你仍然不能让它工作,我可以花时间为你写一个测试用例,但如果你能自己让它工作,我宁愿不花时间。:)
此外,作为参考,Alpha 测试的 OpenGL 文档和glAlphaFunc 的手册页。
看起来 glReadPixels 是您正在寻找的
http://www.opengl.org/sdk/docs/man/xhtml/glReadPixels.xml
使用类似的东西:
glReadPixels (0, 0, XSCREEN, YSCREEN, GL_ALPHA, GL_UNSIGNED_BYTE, buffer);