2

我找到了这篇文章,有点回答我的问题,但不完全:

如何通过选择顶点来拖动线段

我要解决的问题:执行顶点选择的现代方式(使用 OpenGL 4 架构):

  • 用户画了一个选择(橡皮筋,这不是我想要的)
  • 我假设在这个阶段我可以为模型中的每个顶点提供某种唯一 ID
  • 所选区域以某种方式重新渲染,离线使用某种顶点/片段着色器,将顶点存储在我可以读回的缓冲区中?

我只是猜测它涉及某种缓冲区,着色器可以在其中写入渲染顶点的结果,该缓冲区在程序中是可读的。我想知道是否有人已经这样做了,或者至少可以让我朝着正确的方向前进。它需要(理想情况下)快速(在非常大的模型上工作),并使用 OpenGL4(没有不推荐使用的功能,如 GL_SELECT 等)。

  • 理想情况下,我还需要使用相同的技术来选择其他组件,例如边和面。
4

1 回答 1

2

坦率地说:OpenGL 是将事物绘制到屏幕上,而不是场景管理或选择。

您可以使用现代 OpenGL 使用变换反馈缓冲区和滥用 FBO 作为顶点 ID 缓冲区来实现选择。

但我真的不会为此使用 OpenGL。至少不是绘图管道。如果需要 GPU 加速,我会使用 OpenCL 或 OpenGL 计算着色器将我感兴趣的顶点子集转换为屏幕空间,并从中构建屏幕空间 2D Kd 树。然后使用该KD树执行最近邻/边界搜索以查找哪些顶点在选择范围内。如果 OpenCL 或 OpenGL 计算着色器不可用,您也可以在 CPU 上进行转换。

于 2014-06-30T11:29:50.123 回答