如何使用OpenGL中的框选择有效地选择对象
How to efficiently select objects using box selection in OpenGL
如何在OpenGL中有效地进行选择?
我已经阅读了这个问题,但我仍然不确定。
在我的应用程序中,我想支持两种选择。首先使用鼠标单击,然后使用pickbox选择。我的应用程序还继承了90年代和2000年代初期与OpenGl有关的一系列不良编程实践,例如,它使用GL_SELECT。
。阅读所有阅读后,我知道这可能非常低效。我已经了解了两种解决此问题的方法:
- 颜色选择:为每个对象分配独特的颜色场景。在1x1px虚构窗口上渲染并读取颜色。
- 使用碰撞检测的射线铸造
问题:
- 如何为盒子执行彩色选择?我是否只是在盒子大小的窗口上渲染场景,然后阅读像素的矩阵,收集独特的颜色以适当选择?
- Ray铸造了首选方法?如果是这样,如何将其扩展到选箱?
- 除此之外,还有另一种通常使用的方法吗?
1。我如何为盒子执行彩色选择?我是否只是在盒子大小的窗口上渲染场景,然后阅读像素的矩阵,收集独特的颜色以适当选择?
这就是我要做的,但这只会选择至少部分可见的此类对象。完全遮挡的对象将不会选择彩色选择。
2。雷是铸造首选方法吗?如果是这样,如何将其扩展到选箱?
我会说雷铸造是首选方法,是的。afaik,它不容易扩展到挑选盒(尽管这确实是挑选的flustums)。我将使用诸如OCTREE之类的空间数据结构来快速为Frustum选择候选对象,然后我将对每个候选者的边界框进行测试。对于剩下的候选人,我将检查其任何顶点是否位于Frustum中。
也可以重复使用OCTREE来加快射线拾取(单击选择)。
根据对象和顶点的数量,这可能还不够快。我敢肯定有可以加快它的方法。
3。除这些方法外,还有另一种通常使用的方法吗?
不是我知道的。
相关文章:
- 有效地使用std::unordered_map来插入或增加键的值
- 如何有效地在 std::vector 中插入一对?
- 有效地计算多维数组的累积和?
- 如何有效地计算将单位立方体映射到自身的反射和旋转?
- 有效地将大数存储为 2 的幂用于路径问题
- 如何在C++中写入 1000 个文件时有效地缓冲
- 如何有效地找到数组中三元组和的最小差异?
- 如何在C++中有效地将数字值重新分配给字符数组
- C++有效地找到向量中第一个最接近的匹配值?
- 如何有效地操作满足给定谓词的向量中的所有项目?
- 有效地将数据加载到 std::vector 中<char>
- 如何在使用 cin 请求 int 时有效地使用户输入万无一失?
- C++:有效地将Sha256摘要放入OpenSSL Bignum?
- 如何有效地收集给定数组中的重复元素?
- 如何有效地修剪和合并四叉树中的节点?
- 可以有效地转换 std::any 与 std::any_cast
- 只需要知道我在c ++中打印模式的方式是否有效,或者有另一种方法可以有效地做到这一点
- 如何使用OpenGL中的框选择有效地选择对象
- 通过在每个位置从特定位置的单词池中选择单词,有效地生成所有序列
- 如何有效地从std::集中选择随机元素