2016-03-01 45 views
1

我正在使用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)网眼的某些部分是不可见的。这可能意味着我的三角测量会导致曲面法线错误。另外要注意的是,我使用不同三角形中同一顶点的法线来平均顶点的法线。

我该如何解决这个问题?禁用选择来解决这个问题是不是一个好主意? 这里有与屠宰和无 enter image description hereenter image description here

+0

在渲染曲面中没有法线,您可以简单地检查您的多边形是否凸出使用gift wrapping algorithm或者只是穿过顶点并计算dot products。顶点有。表面上的法线是从顶点法线插入的。所以它不应该改变。你可以附加截图 - 启用和禁用“GL_CULL_FACE”吗?你确定你的多边形是凸的吗?否则你的三角剖分可能是错的 –

+0

我加了结果,现在我开始考虑是否真的有一个凸多边形。有没有一种方法来调查这个编程?从视觉上看,特别是在小部件中看起来有点难。 – happycoder

回答

0

问题是与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); 

如果您的多边形是平面和凸的,则您的三角测量是正确的。如果点积变化,多边形不是凸的

+0

刚才我尝试了6种不同的组合顺序,每次不同的部件都不见了。我也会和设计师谈谈他是否使用了任何凹多边形,或者是否有法线的东西并让你知道 – happycoder

+0

很难说,因为我不知道哪个部分是分开的,但是如果你必须执行黑客以正确显示它。如果你使用第三方软件进行建模,它应该可以选择导出它已经进行了三角测量 –