2015-01-26 49 views
0

我正在研究一个项目,我需要选择网格的两个顶点并计算它们之间的最短路径。我使用GL_ARRAY_BUFFER和GL_ELEMENT_ARRAY_BUFFER来绑定OpenGL缓冲区并通过glDrawElements绘制它们。如何在现代OpenGl(3.3以上)中选择网格的顶点或三角形?

找到最短路径在这里不是问题。问题在于顶点选择。我需要通过点击鼠标来选择顶点并存储它们的ID以用于进一步处理。我有一些函数返回鼠标位置,但我找不到可以获取顶点ID或三角形ID的方法。

我还发现了有关rayPicking方法,但那个用于选择网格本身而不是它的一个元素。

我明白任何帮助或想法

更新:,我要对付的网格,有大量的顶点和三角形的,所以如应用独特的颜色给每个顶点的方法是不是正确的解决方案。同样为每个顶点或三角形添加一个球体,并计算出射线与球体的交点也不合适。

+0

您可以使用以每个网格点为中心的球体进行光线拾取。 – 2015-01-27 16:52:34

回答

0

我从来没有实现过这样的东西,但我会推荐像下面这样的另一个渲染通道。

  1. 为每个顶点定义指定顶点ID的唯一颜色。
  2. 因为很难精确地选择一个像素,所以尝试在它周围绘制一个小四边形。 glPointSize(...)可能是有用的。
  3. 从您渲染小四边形的纹理/帧缓冲区中读取像素的颜色。
  4. 计算颜色中的顶点ID。

我听说过几个类似的三角形实现。也许你可以从他们那里获得更多灵感。

+0

谢谢DanceIgel。但不幸的是,我必须处理的网格有很多三角形和顶点(500,000 - 1,000,000)。仍然可以使用颜色,但它会导致彩色网格。 – user2613947 2015-01-27 23:06:35

+0

我发现有关gl_PrimitiveID,GLSL函数之一,但我无法从着色器中获得outpu ID! – user2613947 2015-01-27 23:18:41

+0

@ user2613947也可以将ID直接写入浮动纹理。但我不确定'gl_PrimitiveID'是否与您的输入数据集的确切索引匹配。但当然你可以试试看。 – DanceIgel 2015-01-28 08:16:25