2011-05-04 54 views
0

在下面的OpenGL代碼中,會發生什麼?OpenGL - glVertex替換繪製點?

glNormal3f(nx1, ny1, nz1) 
glVertex3f(x1,y1,z1) 
glNormal3f(nx2, ny2, nz2) //different Normal 
glVertex3f(x1,y1,z1)  //same vector 

在口頭上:
我有一個點有一個正常的,如果我和其他正常的再次創建點,點改變了他的老法向量,或者忽略了最後一個電話?

這個問題來了,當我試圖使用法線以更平滑的方式使用照明渲染球體 。

回答

0

它將簡單地繪製在完全相同的位置。幕後的「魔術」背後並沒有什麼魔法,這些魔法被認爲是在相同的位置,更新法線等。

+0

法線怎麼樣? imagen兩個三角形共享一個共同的一面......如果我重新分配法線到點,三角形的臉部改變它是正常的,當涉及到照明? – 2011-05-04 22:03:05

+0

這取決於你如何定義事物。你的代碼看起來像圍繞着這些頂點和法線?您可以擁有「每個頂點」法線,這是連接到該頂點的面的法線的歸一化平均值,以獲得平滑的着色。或者只是表面法線(也許寫成每個頂點的單獨法線)以具有平坦的陰影三角形。在後一種情況下,您可能會得到您在代碼中顯示的內容。多次出現多個法線的同一個頂點。 – Bart 2011-05-04 22:06:19

+0

好的。 「每個頂點」法線的含義是什麼?如何實現平滑的陰影? – 2011-05-04 22:31:11

1

glNormal3f()只是設置當前正常,這將保持這種方式,直到下一個glNormal3f()調用。

每個glVertex3f()複製當前正常,顏色和紋理座標,並提交一個完整的頂點到GL命令隊列。

+0

謝謝。我現在明白了。 – 2011-05-04 23:22:42