OpenGL鼠标拾取策略

Posted

技术标签:

【中文标题】OpenGL鼠标拾取策略【英文标题】:OpenGL Mouse Picking Strategy 【发布时间】:2011-04-04 19:33:49 【问题描述】:

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

我提到对称性的原因是我使用单个组件的VBOs 构建模型以便于使用。与我正在做的事情的类比是自行车车轮 - 我有一个 VBO 用于辐条,一个用于轮毂,一个用于车轮/轮胎,我会多次重复使用辐条 VBO(之后合适的平移和旋转)。我的第一个问题是,这种安排是否有利于我尝试进行的那种挑选?例如,我希望生成的模型中的每个人都可以“挑选”。 我是否需要为网格中的每个四边形/三角形使用单独的 VBO 来进行我想要做的那种选择?我真的希望不是这样......

另外,最好的挑选算法是什么?我只听说过关于 OpenGL 的内置选择模式的负面消息。提前致谢!

【问题讨论】:

Implementing Ray Picking的可能重复 【参考方案1】:

关于您关于 VBO 的问题,拥有少量 VBO 并重复使用它们并没有错。事实上,您可以在一个 VBO 中拥有所有内容,并且只对其进行索引。对于您的自行车车轮类比,辐条顶点之后可以是轮胎顶点,并且您可以多次绘制辐条的顶点(甚至可以使用实例化,请参阅glMultiDrawElements),然后从同一个 VBO 绘制,但从另一个指标,轮胎。

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

【讨论】:

以上是关于OpenGL鼠标拾取策略的主要内容,如果未能解决你的问题,请参考以下文章

深入理解OpenGL拾取模式(OpenGL Picking)

OpenGL鼠标拾取操作glRenderMode一直返回0

OpenGL学习笔记:拾取与选择

OpenGL C++ 鼠标光线拾取 glm:unproject

求教OPENGL达人 如何做到图像的拾取并可以随鼠标拖动 鄙人QQ664538975 不胜感激

opengl 通过射线鼠标拾取怎么都得不到准确数据