gpt4 book ai didi

c++ - 如何在 OpenGL 中使用框选择有效地选择对象

转载 作者:行者123 更新时间:2023-11-28 02:57:51 25 4
gpt4 key购买 nike

如何在 OpenGL 中高效地执行选择?

我读过这个question ,还有一些事情对我来说仍然不确定。

在我的应用程序中,我想支持两种形式的选择。首先用鼠标单击,然后使用选择框进行选择。我的应用程序还继承了 90 年代和 2000 年代初的一些与 OpenGL 特别相关的不良编程实践,例如,它使用 GL_SELECT。

阅读所有内容后,我明白这可能非常低效。我了解到有两种方法可以解决这个问题:

  1. 颜色选择:为场景中的每个对象分配唯一的颜色场景。在 1x1 像素的假想窗口上渲染它并读取颜色。
  2. 使用碰撞检测的光线转换

问题:

  1. 如何为盒子进行颜色挑选?我是否只是在盒子大小的窗口上渲染场景,然后阅读像素的矩阵,收集独特的颜色以适本地选择?
  2. 光线转换是首选方法吗?如果是这样,如何将其扩展到选择框?
  3. 除了这些还有其他常用的方法吗?

最佳答案

1. How do I perform color picking for a box? Do I simply render the scene on a window the size of my box and read the matrix of pixels collecting the unique colors to select appropriately?

这就是我要做的,但这只会选择至少部分可见的对象。完全遮挡的对象不会被颜色选择选中。

2. Is ray casting the preferred method? If so, how can this be extended for pick boxes?

我会说光线转换是首选方法,是的。 AFAIK,它不能轻易扩展到拾取框(尽管实际上是拾取截锥体)。我会使用诸如八叉树之类的空间数据结构来快速选择视锥体的候选对象,然后针对每个候选对象的边界框测试视锥体。对于剩下的候选者,我会检查它的任何顶点是否位于平截头体内。

八叉树也可以重复使用以加速光线拾取(用于点击选择)。

不过,根据对象和顶点的数量,这可能不够快。不过,我确信有办法加快速度。

3. Is there another method other than these which is commonly used?

据我所知不是。

关于c++ - 如何在 OpenGL 中使用框选择有效地选择对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21584079/

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