一般来说,点和绝大部分方向矢量都可以使用同一个 4x4 或者 3x3 的变换矩阵把其从坐标空间 A 变换到坐标空间 B中。但变换法线的时候,如果使用同一个变换矩阵,可能无法维持法线的垂直性。如下图所示,在进行非统一缩放时,如果使用和变换顶点相同的变换矩阵来变换法线,就会得到错误的结果,即变换后的法线方向与平面不再垂直
【UnityShader】坐标变换之法线变换
  切线是由两个顶点之间的差值计算得到的,因此,可以直接使用用于变换顶点的变换矩阵来变换切线。
解释:
  坐标空间A中两点 a,b,切线 t,法线 nor。经过变换后在坐标空间 B 中的点 A,B,切线 T,法线 Nor。变换矩阵为 Mab

T = B - A = Mab(b - a) = Mab * t

  假设法线变换时使用的变换矩阵为 G

TT Nor = (Mab t)T (G nor) = tT MabT G nor = 0

  已知 tT nor = 0,如果 MabT G = I,那么等式成立

G = (MabT)-1 = (M-1ab)T (转置矩阵的逆矩阵是逆矩阵的转置)

相关文章:

  • 2021-12-21
  • 2022-12-23
  • 2021-05-18
  • 2021-05-17
  • 2021-11-04
猜你喜欢
  • 2021-10-28
  • 2022-12-23
  • 2021-08-03
  • 2022-12-23
  • 2022-12-23
  • 2021-06-02
相关资源
相似解决方案