OpenGL 4中顶点选择的最佳方法

时间:2014-06-30 10:30:24

标签: opengl opengl-4

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

How to drag the line segment by selecting the vertex

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

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

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

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

1 个答案:

答案 0 :(得分:0)

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

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

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