今天看了UnityShader入门精要里4.6.2节讲解的坐标空间变化矩阵的时候,发现逻辑挺绕,故此记录加深印象与理解。
首先Mc->p变换矩阵:
"|"表示是按列展开的,Xc,Yc,Zc,Oc 分别代表坐标空间C的XYZ轴和原点在P坐标空间的表示。这个就不多说了,书上推导过程非常清晰。这里面绕的是一些性质和反推:
1.首先如果你得知了坐标空间C的XYZ轴及原点在坐标空间P的表示,那么这个Mc->p的转换矩阵直接就出来了,那么反过来,如果你有了这个矩阵,你也可以知道坐标空间C的XYZ轴及原点在坐标空间P的表示。
2.我们知道矢量是没有位置的,因此坐标空间的原点变化是可以忽略的,也就是说仅仅通过平移坐标系的原点是不会对矢量造成任何影响的。因此,对于矢量的坐标空间变换就可以使用3X3的矩阵来表示,因为我们不需要表示平移变换,那么变换矩阵就是:
3.知道了Mc->p,那么Mp->c就是它的逆变换,可以通过求逆矩阵的方式求解出来。但如果Mc->p是一个正交矩阵的话,那么
Mc->p的逆矩阵就等于它的转置矩阵,不需要再进行复杂的求逆操作了,所以有下列式子:
从这个式子中可以发现,不旦可以知道坐标空间P的XYZ轴在坐标空间C的表示(每一列),还能知道坐标空间坐标空间C的XYZ轴在坐标空间P的表示(每一行)