2010-11-30 67 views
3

我有一個三角形網格,我試圖計算法線,所以我可以在繪製網格時應用它們。我使用即時模式(當我有時間瞭解它們的工作原理時,可能會更改爲頂點數組),並使用GL_TRIANGLE_STRIP繪製網格。計算和應用法線到三角形網格

我在計算頂點法線時遇到了麻煩。更確切地說,決定在計算中使用哪些相鄰頂點,然後決定何時設置這些法線。考慮到這一點:

1_2 
|/| Supposedly a square where the numbers represent the vertex number in a    
3 4 triangle strip. 

我知道你必須計算屬於一個平面的2個向量的叉積爲了得到平面正常。所以在這個例子中,頂三角的正常值可以通過(2-1)x(3-1)來計算,第二個通過做(2-4)x(3-4)來計算。那麼如何在立即模式下繪製三角形條時應用法線?

我在做的事情是設置vtx 1設置第一個正常,第二個設置vtx 4,第三個設置vtx 5等等。然而,這會產生問題,因爲顯然通過使用不同的法線爲三角形的每個頂點(當他們應該都是相同的)。例如,三角形| 2,3,4 |將僅具有正確法線的頂點4(因爲對於頂點2和3,法線將是第一個三角形中的一個)。

那麼應該怎麼做?有沒有辦法,還是我需要更改爲GL_TRIANGLES? (我現在不想立即停止使用即時模式,因爲我沒有時間)。

回答

2

如果我是正確的,你仍然只計算每個三角形的正常值?這是正確的,但在此之後,你應該計算每個頂點的法線是什麼。這只是特定頂點所連接的所有三角法線的歸一化總和。 完成後,您可以繼續進行即時模式繪圖,並指定每個頂點的法線。

+2

這對插值頂點着色是正確的。如果你想要有平坦的陰影,你需要複製共享頂點,以便每個面的每個點集具有獨特的法線而不是平均值。 – 2010-11-30 19:18:42