我正在使用OpenGL渲染在给定平面中旋转对称的对象模型,我希望用户能够在模型上滚动(可能在旋转,缩放等之后)并确定鼠标当前指向的模型上的世界坐标。
我提到对称性的原因是我使用VBO个独立组件构建模型以方便使用。我正在做的一个类比就是自行车车轮 - 我有一个用于轮辐的VBO,一个用于轮毂,一个用于车轮/轮胎,我将多次重复使用轮辐VBO(之后)合适的翻译和轮换)。我的第一个问题是,这种安排是否有利于我正在尝试的采摘方式?例如,我希望在结果模型中每个人都说“可选”。 我是否需要为网格中的每个四边形/三角形单独使用VBO来进行我正在尝试的那种选择?我真的希望情况并非如此......
此外,最佳选择算法是什么?关于OpenGL的内置选择模式,我什么都没听到。提前谢谢!
答案 0 :(得分:3)
关于你关于维吾尔族人的问题,没有什么错误,只需要很少的VBO并重复使用它们。实际上,您可以将所有内容放在一个VBO中,并且只对其进行索引。对于你的自行车车轮类比,轮辐顶点可以跟随轮胎顶点,你可以多次绘制辐条的顶点(甚至可以使用实例化,参见glMultiDrawElements
),然后从相同的VBO中绘制但是从不同的指数开始,轮胎。
关于拾取问题,在鼠标下获取模型上点的世界坐标的一种简单方法是读回1x1矩形上的深度值(glReadPixels
,最好使用像素缓冲区对象在最后一帧的数据上,这样就可以隐藏传输延迟)。然后拨打gluUnproject
以获取世界坐标。