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

如圖,已知2個(gè)點(diǎn),坐標(biāo)分別是P1,P2,還已知他們的紋理坐標(biāo),分別是(u1,v1)和(u2,v2),還知道了第一個(gè)點(diǎn)的法向量,我們要計(jì)算的就是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
接下來,我們可以用點(diǎn)1的各個(gè)數(shù)據(jù)來表示點(diǎn)2的坐標(biāo)位置:
P1+T*(u2-u1)+B*(v2-v1)=P2(或者uv交換位置:P1+T*(v2-v1)+B*(u2-u1)=P2,具體是那個(gè)可以不管...)
這樣6個(gè)未知量6個(gè)方程,就可以計(jì)算得出點(diǎn)1的tangent space了~~
從這里也可以理解到,當(dāng)紋理貼圖坐標(biāo)不夠連續(xù)時(shí)為什么normal mapping的效果會(huì)不理想,因?yàn)橛?jì)算一個(gè)點(diǎn)的tangent space還要依賴周圍的點(diǎn)的信息
posted on 2009-10-12 23:38
陳昱(CY) 閱讀(1631)
評(píng)論(0) 編輯 收藏 引用 所屬分類:
圖形學(xué)