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

时间:2011-08-30 03:55:43

标签: opengl

line_loop由opengl创建。我需要选择线段的顶点,然后将其拖动到2D屏幕中的某个位置。

我的想法是使用Opengl拾取方法拾取线的顶点,然后从glSelectBuffer创建存储命中记录的缓冲区。问题是我如何知道从返回的缓冲区的信息中选择哪个顶点?缓冲区存储顶点的name。但似乎顶点在GL_RENDER模式下没有名称?

更新:有没有其他方便的鼠标拖动线?

1 个答案:

答案 0 :(得分:4)

OpenGL不是一个场景图(哇,似乎我在OpenGL上的每个其他问题都是从这个陈述开始的)。在您绘制了一些内容之后,OpenGL不再记录您实际发送的内容。旧的OpenGL选择模式在技术上只是测试提交的几何体是否在投影剪辑空间范围内。在大多数OpenGL实现中,选择模式会回退到软件渲染模式,因此您将获得重大的性能影响。

有几种更好的选择方法(这就是为什么选择模式毕竟已从OpenGL中删除)。如果它只是特定几何体中的单个顶点(如选择橡皮带),那么您应该自己将这些点的整个转换为标准化设备坐标,将它们分类为一些屏幕空间空间细分结构(2d Kd树,四叉树)等等,以便您可以确定在 O(log n)时间内点击的点 - 与您在选择模式下的O(n)相比,您必须“绘制“整个橡皮筋,以便测试所有点。

EDIT /更新

由于OpenGL(仅)是一个绘图API,你也无法“拖拽”东西。你必须重绘它们。从技术上讲,您应该重绘整个场景,或者在开始拖动时,绘制场景而不将对象拖动到纹理(颜色和深度)中,然后对于每个拖动步骤清除纹理中缓存内容的视图然后将拖动的对象添加到其更新的位置。