法線從object space到eye space的轉換((normal matrix)


  對於頂點來說,從object Space轉換到eye space, 使用model-view矩陣就好了.那么頂點的法線是否也可以直接使用model-view矩陣轉化?

  通常情況下是不行的.

  如下兩張圖是頂點的tangent和normal向量使用m-v矩陣從object space到eye space的變換:

  >>>>>>>>>>>>>>>>  

  可以看到在eye-space中,tangent的方向仍符合定義,normal則不再垂直於tangent了.m-v矩陣不適用於normal.

  令T為tangent,MV為model-view矩陣.P1, P2為tangent聯系的2個頂點.

  T = P2 - P1

  T' = T * MV = (P2 - P1) * MV = P2 * MV - P1 * MV = P2' - P1'

  因此T'保留了tangent的定義.但對於normal,你也可以找到N=Q2-Q1代表它,但是變換后Q2'-Q1'卻不能保證垂直於T'.object space到view space,角度關系被改變了.

  如何求出normal的變換,維持與tangent垂直?假設該變換為G.

  normal與tangent垂直:
  N'.T' = (GN).(MT) = 0

  點積轉化為叉積:

  (GN).(MT) = (GN)T * (MT) = (GN)T(MT) =  (NTGT)(MT) = NTGTMT = 0

  注意到NTT為0:

  若GTM = I,則上式成立.因此G=(M-1)T.

  即normal matrix是model-view矩陣的逆矩陣的轉置矩陣.

  若model-view矩陣是一個正交矩陣,則G=M.這便是例外情況下normal matrix為model-view矩陣.

  


免責聲明!

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



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