2014-09-06 64 views
0

[用於遊戲中的延期照明計算]如何計算三角形的副法線和正切值?

可以說我有一個頂點ABC,法線DEF和紋理座標LMN的任意三角形。

現在,我們有載體

G = B-A 
H = C-A 

O = M-L 
P = N-L 

下一步是計算的切空間:

G = O.s * T + O.t * U 
H = P.s * T + P.t * U 

這裏就是我卡住了...

G和H 3維矢量,而O和P是二維的。

從這一點開始,正切空間的乘法是如何工作的? 一旦切線空間被確定,我如何獲得副法線和切線? T是副法線,U是切線?

+1

這個問題似乎是脫離主題,因爲它不是關於編程。請參閱幫助中心的[我可以詢問哪些主題](http://stackoverflow.com/help/on-topic)。也許[數學堆棧交換](http://math.stackexchange.com/)會是一個更好的地方。 – jww 2014-09-06 12:02:29

+0

我的歉意。我認爲這個問題是關於編程的,因爲它涉及到3D圖形和照明。 – 2014-09-06 18:25:18

+0

請問爲什麼這個作爲一個副本被擱置。我實際上是在使用另一個問題作爲參考,但需要澄清它的細節。 (困惑於如何解決T和U,這是在另一個涵蓋但不是我理解的方式)。 – 2014-09-06 18:28:44

回答

1

以及我不使用紋理座標礦TBN矩陣計算

你的名字混淆了,所以讓我重寫三角3Dp0,p1,p2。您需要TBN矩陣T,B,N(切線,副法線,正常)

  1. 正常

    法線垂直於三角面,所以你在三角形頂點的叉積得到它:

    N=(p1-p0)x(p2-p0) 
    

    方向取決於你的需求,所以你也可以使用這個 N =(p2-p0)x(p1-p0) 這是第Ë僅載體,其是直線前進

  2. 切線,副法線

    都位於三角形表面平面和應與網的其餘部分相容。這很棘手,取決於網格幾何。如果您已生成幾何圖形(如球體,...),則可以將初始方向矢量設置爲某個軸。從這很容易只使用交叉產品。例如,圍繞Z軸的旋轉幾何: T =(0.0,0.0,1。0)×N個 乙= N×T的 也在這裏是方向依賴於你的需要,所以你可以使用反向橫操作數命令

如果不計算TBN爲整個幾何兼容,那麼你將得到照明工件

有時整個網狀使用扭曲單整個矩形紋理像例如在該橢球頭:

ellipsoid texture

只有在這種情況下,紋理座標才表示正切和副法線空間座標,只有這樣您纔可以使用它們來獲取T,B。我不使用這種方法,所以我會用你的方程。

t0,t1,t2成爲你三角形的2D紋理座標(相對於點p0,p1,p2):

(p1-p0) = (t1-t0).s * T + (t1-t0).t * B 
(p2-p0) = (t2-t0).s * T + (t2-t0).t * B 

這是線性方程的系統(6個未知數6個方程),以便解決它,並計算T,B(切線,副法線)。看這裏How to calculate Tangent and Binormal?。解決方案也在那裏(使用與你使用的相同的字母)

+0

只是想檢查'x'是交叉的,'*'是乘法。正確? – 2014-09-06 19:32:27

+0

@ user2841239是'x'是向量之間交叉的(結果與操作數垂直),'*'在標量和其他之間是乘法的...... – Spektre 2014-09-07 05:37:49