美文网首页
法线从object space到eye space的转换(nor

法线从object space到eye space的转换(nor

作者: 雄关漫道从头越 | 来源:发表于2019-06-15 19:20 被阅读0次

    法线从object space到eye space的转换(normal matrix)
    法线与切线的仿射变换矩阵关系

    对于顶点来说,从object Space转换到eye space, 使用model-view矩阵就好了.那么顶点的法线是否也可以直接使用model-view矩阵转化?

    当我们应用一个不等比缩放时(注意:等比缩放不会破坏法线,因为法线的方向没被改变,仅仅改变了法线的长度,而这很容易通过标准化来修复),法向量就不会再垂直于对应的表面了。

    如下两张图是顶点的切线(T)和法向量(N)使用m-v矩阵从object space到eye space的变换:

      

    可以看到在eye-space中,变换后的切线(T')的方向仍符合定义,变换后法向量(N')则不再垂直于变换后的切线(T')了,m-v矩阵不适用于法向量的变换.

    下面给出法线变换矩阵的推导过程:
    设法线为N,切线为T,经过变换后的分别为N ' 、T ',已知:T到T '的变换矩阵为M,求N到N '的变换矩阵G
    已知其变换矩阵,则:N '=GN; T '=MT;
    因为法线与切线垂直则其点乘为0,有:N·T = 0(单位矩阵)
    变换后法线仍与切线垂直:T '·N '=0
    因此:
    (GN)·(MT)=0
    写成矩阵表示:
    (GN)T(MT)=0
    NTGTMT=0
    已知NTT=0 (即向量表示下的N·T = 0)
    则GTMT = T
    GTM = I
    G=(M-1)T
    因此法线变换矩阵为切线变换矩阵的逆矩阵的转置矩阵。
    注意:
    (GN)·(MT)=0=>(GN)T(MT)=0是因为,GN是一个4维向量(x1,y1,z1,w1),MT因为是一个4维向量(x2,y2,z2,w2),根据点乘的计算公式知道(GN)·(MT)=x1x2,y1y2,z1z2,w1w2,而(GN)T是一个4x1的矩阵,(MT)可以看出是1x4的矩阵,(GN)T(MT)=x1x2,y1y2,z1z2,w1w2,所以(GN)·(MT)=0=>(GN)T(MT)=0

    即normal matrix是model-view矩阵的逆矩阵的转置矩阵.

    若model-view矩阵是一个正交矩阵(没有进行缩放的情况),则G=M.这便是例外情况下normal matrix为model-view矩阵.

    另外在unity3d引擎中,法线矩阵已经作为内置的变量提供给我们了,UNITY_MATRIX_IT_MV,Inverse transpose of model * view matrix,直接用就可以了,如果是其他一些情况则需要自己自行计算了。

    相关文章

      网友评论

          本文标题:法线从object space到eye space的转换(nor

          本文链接:https://www.haomeiwen.com/subject/jxcifctx.html