gpt4 book ai didi

c++ - OpenGL - 采摘(最快的方式)

转载 作者:太空宇宙 更新时间:2023-11-04 15:02:36 24 4
gpt4 key购买 nike

我想实现场景拾取(鼠标点击、移动等)。最好、最快的方法是什么?我曾经将 glSelectBufferglRenderModeGL_SELECT 一起使用,然后再次渲染整个场景(当然有提升,没有纹理,重着色器等。 ).

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

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

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

最佳答案

因为我是新来的,所以我不能直接回答乔,所以我会在这里回答。我从来没有尝试过他的方法,所以我不确定它是否适合你。希望它会,如果没有:我会给你我的版本。有多种方法可以做到这一点。再次渲染整个场景似乎有点矫枉过正。

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

这里解释了所有这些方法: http://www.opengl-tutorial.org/miscellaneous/clicking-on-objects/

关于c++ - OpenGL - 采摘(最快的方式),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28032910/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com