场景中有些物体可能会遮挡其他物体。当我单击鼠标或拖动选择时,我希望只选择/拾取从这个视角可以看到的物体。应用程序当前使用GL_SELECT渲染模式,但我们知道,这也会选择被遮挡的物体。此外,我读到在OpenGL 3中,GL_SELECT已被弃用。
目前有两种方法吸引我的注意。第一种是使用后备缓冲区的对象选择(《红宝书》,第14章):将每个对象的颜色设置为其对象ID,并从后帧缓冲区读取像素的颜色。第二种是遮挡查询(《超级圣经》,第4版,第13章)。
我排除了其他方法,比如查看选择缓冲区中的最小/最大z值以及在GL之外进行自定义光线/物体检测等。
我有一些问题: 1)如果GL_SELECT在最近的OpenGL中已被弃用,开发人员应该使用什么替代品? 2)我只读过遮挡查询被用来加速渲染。它们能用于选择/拾取吗?是否存在缺点? 3)现有应用程序有几个glColorXXX调用。如果我选择了使用后备缓冲区的路线,并使用glColorMask(FALSE,FALSE,FALSE,FALSE),这是否会有效地将glColorXXX调用转换为没有效果的调用,从而在选择模式下让我控制颜色? 4)哪种方法是最好/标准的?