【OpenGL】法線變換詳解(Normal Transform)[轉]


http://blog.csdn.net/xiajun07061225/article/details/7762711

在圖形學中,同樣的一個模型視圖變換矩陣可以用來變換點、線、多邊形以及其它幾何體,也可以變換多邊形表面的切向量。比如:

posEyeSpace = ModelViewMatrix * posModelSpace。

但是,同樣的方式通常卻不能夠用於法線的變換(注意:在有些情況下是可以的)。

 

一、法線和頂點坐標的區別

 

頂點坐標<x,y,z>表示缺省的<x,y,z,1>,而法線向量的<x,y,z>表示缺省的<x,y,z,0>。

法線向量只能保證方向的一致性,而不能保證位置的一致性。

 

下面我們通過一個例子來看看問題所在。


上圖是針對一個多邊形以及一條邊上的法線進行縮放變換:X軸上縮放為原來的0.5倍。左邊是變換前的狀態,中間是將同樣的模型變換矩陣應用在法線上的結果,顯然是錯的,法線並不垂直於切線。最右邊的圖是正確的結果。

 

二、法線變換:應該用變換矩陣的逆轉置矩陣

 

假設Model space中的某條切線向量是T,法線向量是N。那么由他們是垂直的可得到:TTN=0

假設他們變換到Eye space中后分別是T'和N'。那么他們應該仍然是相互垂直的:T’TN’=0

假設切線向量和法線的變換矩陣為M、G。則有:(MT)T(GN)=0

 

進一步推出:TTMTGN=0

由於TTN=0,因此我們猜想MTG=0.因此:《注:我覺得這里該寫 MTG=E. E:為單位矩陣》

 

G=(M-1)T

即:應用於法線向量的變換矩陣是頂點變換矩陣的逆轉置矩陣。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM