這里介紹一種本人想到的最容易看懂的算法,不過計算量還是比較大呵呵

如圖,已知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還要依賴周圍的點的信息