學(xué)習(xí)normal mapping時,首先需要理解什么是TBN矩陣,在
http://blog.csdn.net/soilwork/archive/2006/12/30/1468860.aspx中的環(huán)形圖已經(jīng)可以很容易理解TBN的三個分量含義了,但是對于如何計算,找了很多地方都沒有一個比較“通俗”的算法(實際上是我沒有看懂...)
這里介紹一種本人想到的最容易看懂的算法,不過計算量還是比較大呵呵

如圖,已知2個點,坐標(biāo)分別是P1,P2,還已知他們的紋理坐標(biāo),分別是(u1,v1)和(u2,v2),還知道了第一個點的法向量,我們要計算的就是P1的tangent space,即除了法向量外的所謂的“副法向量”B 和所謂的“tangent向量”T。
直接假設(shè)所求的B和T在世界坐標(biāo)中的值:B=(xb,yb,zb),T=(xt,yt,zt)
很容易就知道:
T·B=0
N·T=0
B·N=0
另外他們都是單位向量,又有:
|T|=1
|B|=1
接下來,我們可以用點1的各個數(shù)據(jù)來表示點2的坐標(biāo)位置:
P1+T*(u2-u1)+B*(v2-v1)=P2(或者uv交換位置:P1+T*(v2-v1)+B*(u2-u1)=P2,具體是那個可以不管...)
這樣6個未知量6個方程,就可以計算得出點1的tangent space了~~
從這里也可以理解到,當(dāng)紋理貼圖坐標(biāo)不夠連續(xù)時為什么normal mapping的效果會不理想,因為計算一個點的tangent space還要依賴周圍的點的信息
posted on 2009-10-12 23:38
陳昱(CY) 閱讀(1635)
評論(0) 編輯 收藏 引用 所屬分類:
圖形學(xué)