OpenGL-拾取(最快方式)

西弗勒斯

我想实现场景选择(用于鼠标单击,移动等)。最好,最快的方法是什么?我曾经使用glSelectBufferglRenderMode一起使用GL_SELECT,然后再次渲染整个场景(当然使用boost,没有纹理,浓密的着色器等)。

每次单击,移动和拖动时,递归渲染一个数字(几何ID)的所有节点和几何体的速度太慢。有人知道更好的方法吗?

编辑:读取深度缓冲区的解决方案似乎很困难,但是如果我不想选择某些几何形状并且它们已经淹没了缓冲该怎么办?因为点可以在多个框中,所以包含点的查找框可能不精确。

是否可以在一次绘制中写入两个帧缓冲区,深度缓冲区?然后,我可以通过着色器将几何ID写入一个缓冲区。那速度呢?

汤姆·奎梅尔(Tom Quareme)

由于我是新来的,因此我无法直接回答Joe,所以我将在这里进行。我从来没有尝试过这样做的方法,所以我不确定它是否对您有用。希望如果没有的话,我会给你我的版本。您可以通过多种方式进行操作。再次渲染整个场景似乎太过分了。

我这样做的方法是OBB-Ray相交测试。您考虑几何周围的面向对象的边界框,并检测它们是否与您单击鼠标所发出的光线碰撞。如果您需要较低的精度,我会说选择AABB甚至Sphere。更精确:凸包。请注意,您要求的精度越低,算法就越快。可能有些大材小用,但是如果您不想自己实现算法,可以考虑使用物理库进行加速计算,例如Bullet或PhysX。另一种方法是我以前从未使用过的OpenGL hack。

此处说明了所有这些方法:http : //www.opengl-tutorial.org/miscellaneous/clicking-on-objects/

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章