我找到了这篇文章,它有点回答了我的问题,但并不完全:
How to drag the line segment by selecting the vertex
我试图解决的问题:执行顶点选择的现代方法(使用 OpenGL 4 架构):
- 用户绘制一个选择(橡皮筋,这不是我想要的)
- 我假设在这个阶段我可以为模型中的每个顶点提供某种唯一的 ID
- 所选区域以某种方式重新渲染,使用某种顶点/片段着色器离线重新渲染,该着色器将顶点存储在我可以读回的缓冲区中?
我只是猜测它涉及某种缓冲区,着色器可以在其中写入渲染顶点的结果,该缓冲区在程序中可读。我想知道是否有人已经这样做了,或者至少可以引导我走向正确的方向。它需要(理想情况下)快速(适用于非常大的模型),并使用 OpenGL4(不推荐使用 GL_SELECT 等功能)。
- 理想情况下,我还需要使用相同的技术来选择其他组件,例如边缘和面。
最佳答案
坦率地说:OpenGL 的目的是将事物绘制到屏幕上,而不是场景管理或选择。
您可以使用现代 OpenGL 通过变换反馈缓冲区并滥用 FBO 作为顶点 ID 缓冲区来实现选择。
但我真的不会为此使用 OpenGL。至少不是绘图管道。如果需要 GPU 加速,我会使用 OpenCL 或 OpenGL 计算着色器将我感兴趣的顶点子集转换为屏幕空间,并根据它们构建屏幕空间 2D Kd 树。然后使用该 KD 树执行最近邻居/边界搜索以查找哪些顶点在选择范围内。如果 OpenCL 或 OpenGL 计算着色器不可用,您也可以在 CPU 上进行转换。
关于opengl - OpenGL 4 中顶点选择的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24488080/