如何使用OpenGL中的框选择有效地选择对象

How to efficiently select objects using box selection in OpenGL

本文关键字:选择 有效地 对象 何使用 OpenGL      更新时间:2023-10-16

如何在OpenGL中有效地进行选择?

我已经阅读了这个问题,但我仍然不确定。

在我的应用程序中,我想支持两种选择。首先使用鼠标单击,然后使用pickbox选择。我的应用程序还继承了90年代和2000年代初期与OpenGl有关的一系列不良编程实践,例如,它使用GL_SELECT。

阅读所有阅读后,我知道这可能非常低效。我已经了解了两种解决此问题的方法:

  1. 颜色选择:为每个对象分配独特的颜色场景。在1x1px虚构窗口上渲染并读取颜色。
  2. 使用碰撞检测的射线铸造

问题:

  1. 如何为盒子执行彩色选择?我是否只是在盒子大小的窗口上渲染场景,然后阅读像素的矩阵,收集独特的颜色以适当选择?
  2. Ray铸造了首选方法?如果是这样,如何将其扩展到选箱?
  3. 除此之外,还有另一种通常使用的方法吗?

1。我如何为盒子执行彩色选择?我是否只是在盒子大小的窗口上渲染场景,然后阅读像素的矩阵,收集独特的颜色以适当选择?

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

2。雷是铸造首选方法吗?如果是这样,如何将其扩展到选箱?

我会说雷铸造是首选方法,是的。afaik,它不容易扩展到挑选盒(尽管这确实是挑选的flustums)。我将使用诸如OCTREE之类的空间数据结构来快速为Frustum选择候选对象,然后我将对每个候选者的边界框进行测试。对于剩下的候选人,我将检查其任何顶点是否位于Frustum中。

也可以重复使用OCTREE来加快射线拾取(单击选择)。

根据对象和顶点的数量,这可能还不够快。我敢肯定有可以加快它的方法。

3。除这些方法外,还有另一种通常使用的方法吗?

不是我知道的。