在原始坐标系中给定一个新的坐标系的x,y,z三个轴的向量,求空间转换矩阵。
再具体些:
比如最常用的tangent,binormal,normal的然后求一个矩阵,可以将原始坐标系中的一个向量转换到切空间。
向量与矩阵乘法一律是向量为一行,在左的乘法方式。
answer: transpose(float3x3(tangent,binormal,normal));
推导:
一个向量在一个坐标系中x,y,z坐标的含义即是这个向量在x,y,z轴上单位向量的投影大小,当然这个大小有正负号修饰的。
那么一个原始坐标系的向量在切空间的坐标就是在tangent,binormal,normal上的投影,也就是用点乘。
这样就可以得出切空间的转换矩阵应该是transpose(float3x3(tangent,binormal,normal));
那么其他坐标系转换方式其实一样了。
另外因为矩阵中三个分量都是单位向量,所以是正交矩阵就有
mul(matrix, transpose(matrix))==Identity Matrix;==>
transpose(matrix) == inverse(matrix):其转置即为逆矩阵;
原文链接:
http://blog.csdn.net/ccanan/article/details/1637314