首页 > 代码库 > 计算顶点法向量在世界坐标中的值

计算顶点法向量在世界坐标中的值

顶点从模型空间转换到世界坐标空间只需要乘以世界转换矩阵即可,但是顶点的法向量却不能通过直接乘以这个矩阵将其变换到世界空间。

一个顶点的世界转换矩阵为m,则该顶点的法向量转换矩阵为m的逆矩阵然后转置

Vec3 localVertex, localNormal;

Vec3 worldVertex=localVertex*m;

Vec3 worldNormal=localNormal*(m-1)t

 

可以参考:http://www.cnblogs.com/mengdd/archive/2011/08/30/2598025.html

以下内容来自http://www.cnblogs.com/qzzlw/archive/2012/10/23/2736277.html

顶点从模型空间转换到世界坐标空间只需要乘以世界转换矩阵即可,但是顶点的法向量却不能通过直接乘以这个矩阵将其变换到世界空间。原因是世界矩阵不仅包含旋转,还有可能包含着缩放操作,如果模型被不成比例的缩放,在不同方向上会有不同程度的拉伸或者压缩,顶点的坐标会因而伸缩,但是如果对法向量进行同样的伸缩,那么变化后的法向量将不再垂直于对应的表面。因此对应没有缩放或等比缩放的世界转换矩阵,可以直接采用相同的转换矩阵作为法向量的变换矩阵。那对于有不等比缩放或者通用的法向量转换矩阵,该如何求取呢?

假定采用行向量,假定一个通过原点的面的法向量为n,转换矩阵为m,面上面某点为p,则有(p-0)nt==0  即 pnt=0, 假设有个转换矩阵x,对法线转换后仍然垂直于经过m转换后的面,则有 pm (nx)t=0 展开 pmxtnt=0;从这个等式看到 如果 mxt=I,(I为单位矩阵), 则  pmxtnt=pInt=pnt=0;

而对mxt=I求解可得到x=(m-1)t  .

通过上面的计算可以知道,如果一个顶点的转换转换矩阵为m,则该顶点的法向量转换矩阵为 m的逆矩阵然后转置

计算顶点法向量在世界坐标中的值