【问题标题】:polygon to triangle convertion effect visibility of the mesh网格的多边形到三角形转换效果可见性
【发布时间】:2016-03-01 22:46:19
【问题描述】:

我正在使用 OpenGL ES 来可视化具有超过 3 个顶点的多边形的网格。我想使用以下循环将这些多边形转换为三角形。在循环中,我创建了polygonVertexSize-2 的三角形数量,只需填充一个 OpenGL 索引数组,该数组以不同的顺序和时间引用相同的顶点。

for(int j=0;j<polygonVertexSize-2;j++)   //number of triangles
   {

    //GetPolygonVertex returns the index of a polygon Vertex 
    indices[indp+0]=Polygon->GetPolygonVertex(0); 
    indices[indp+1]=Polygon->GetPolygonVertex(1+j);
    indices[indp+2]=Polygon->GetPolygonVertex(2+j);
    indp+=3;

   }

这种转换的问题是,除非我应用 glDisable(GL_CULL_FACE),否则网格的某些部分是不可见的。这可能意味着我的三角剖分导致表面法线错误。另一件需要注意的是,我使用不同三角形中相同顶点的法线来平均一个顶点的法线。

我该如何解决这个问题?禁用剔除来解决这个问题是个坏主意吗? 这是剔除和不剔除的结果

【问题讨论】:

  • 在渲染表面时没有法线。顶点有。表面上的法线是从顶点法线插值的。所以不应该改变。您能否附上屏幕截图 - 启用和禁用 GL_CULL_FACE?你确定你的多边形是凸的吗?否则你的三角测量可能是错误的
  • 我添加了结果,我现在开始思考是否真的存在凸多边形。有没有办法以编程方式对此进行调查?视觉上有点难以看到,尤其是在小部分。

标签: c++ opengl-es mesh triangulation


【解决方案1】:

问题在于back-face culling。 部分网格是不可见的,因为它们背对相机。 glDisable(GL_CULL_FACE) 是解决此问题的最简单方法,但这可能会导致性能问题(每个三角形被处理两次)。但它不应该影响你的场景。 如果你想“正确”地做,你必须改变隐形三角形的绕组。只需交换两个顶点。

//only for invisible triangles
indices[indp+0]=Polygon->GetPolygonVertex(0); 
indices[indp+1]=Polygon->GetPolygonVertex(2+j);
indices[indp+2]=Polygon->GetPolygonVertex(1+j);

如果您的多边形是平面和凸面,则您的三角剖分是正确的。您可以使用gift wrapping algorithm 简单地检查您的多边形是否是凸的,或者只是遍历顶点并计算dot products,如果点积的符号发生变化,则多边形不是凸的

【讨论】:

  • 刚才我尝试了这个顺序的6种不同组合,每次都缺少不同的部分。如果他使用任何凹多边形或法线是否有什么东西,我也会与设计师交谈并让您知道
  • 很难说,因为我不知道哪个部分是分开的,但是如果您必须执行黑客操作才能正确显示它,模型显然会损坏。如果您在第 3 方软件中对其进行建模,它应该可以选择导出已三角化的模型
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-01-25
  • 2021-09-04
  • 2012-06-11
  • 2011-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多