2016-03-01 84 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

很難說,因爲我不知道哪個部分是分開的,但是如果你必須執行黑客以正確顯示它。如果你使用第三方軟件進行建模,它應該可以選擇導出它已經進行了三角測量 –