关于选择:OpenGL鼠标拣选策略

OpenGL Mouse Picking Strategy

我正在使用OpenGL渲染给定平面上旋转对称的对象模型,我希望用户能够在模型上滚动(可能在旋转、缩放等之后),并确定鼠标当前指向的模型上的世界坐标。

我提到对称性的原因是,为了便于使用,我正在使用各个组件的vbos构建模型。类似于我正在做的事情是一个自行车车轮-我会有一个vbo用于轮辐,一个用于轮毂,一个用于车轮/轮胎,我会多次(经过适当的翻译和旋转)使轮辐vbo复苏。我的第一个问题是,这样的安排是否有助于我所要做的选择?例如,我希望结果模型中的每个人都是"可选择的"。我是否需要为网格中的每个四边形/三角形分别使用一个vbo来进行我尝试进行的选择?我真的希望不是这样…

另外,什么是最好的选择算法?关于OpenGL的内置选择模式,我只听到一些负面的消息。事先谢谢!


关于vbos的问题,很少使用vbos并重用它们没有什么错。实际上,您可以在一个vbo中包含所有内容,并且只能对其进行索引。对于您的自行车车轮类比,轮辐顶点可以后跟轮胎顶点,您可以多次绘制轮辐的顶点(甚至可以使用实例,请参见glMultiDrawElements),然后从相同的vbo绘制,但从不同的索引开始,即轮胎。

关于您的选择问题,获得模型上鼠标下点的世界坐标的一个简单方法是读取深度值(1x1矩形上的glReadPixels,最好是在最后一帧的数据上使用像素缓冲对象,这样可以隐藏传输延迟)。然后调用gluUnproject得到世界坐标。