三维空间绕x、y、z轴的旋转矩阵
y轴旋转矩阵用的是逆矩阵的原因:
旋转矩阵列元素的数值和旋转的轴向是正向对应的。
x轴由y轴叉乘z轴得到,其旋转是由y轴转向z轴, 是正向的,所以y列元素和z列元素使用的是正向旋转的值。
z轴由x轴叉乘y轴得到,其旋转是由x轴转向y轴, 是正向的,所以x列元素和y列元素使用的是正向旋转的值。
y轴由z轴叉乘x轴得到,其旋转是由z轴转向x轴, 是逆向的,正向矩阵x列元素和z列元素使用的是x轴转向z轴的值,所以要使用x轴转向z轴的负角度即z轴转向x轴,负角旋转矩阵就是其逆矩阵。
欧拉角
俯仰角(pitch):上下俯仰
偏航角(yaw):左右旋转
翻滚角(roll):两侧翻滚
拍照的步骤
1,模型变换:摆放物体
2,视图变换:摆放相机,并且把物体转换到相机的坐标空间。
3,投影变换:把三维空间的物体投影到照片上。
视图变换
相机的定义:位置e、观察方向g、上方向t(垂直于朝向)
如何把物体转换到相机的坐标空间:
1,把相机变换到标准位置和方向:移动相机位置e到原点,旋转观察方向g到-z方向,旋转上方向t到y轴方向,旋转gxt方向到x轴方向。
2,物体做和相机相同的变换。
获取旋转矩阵:
1,获取相机标准方向到当前方向的旋转矩阵,即X到g x t、Y到t、Z到-g,
2,获取步骤1旋转矩阵的逆矩阵即转置矩阵,从而得到g x t到X、t到Y、g到-Z的旋转矩阵。
X到g x t、Y到t、Z到-g分别进行变换:
由此可以得出:
变换对于任一向量和点都可成立
任一向量的变换可以拆分成X、Y、Z三个方向向量的变换:
任一点的变换可以拆分成X、Y、Z三个方向向量和原点的变换:
再次证明变换矩阵的正确性
投影变换
正交投影
1,把场景包围盒分成六个面[l, r] x [b, t] x [f, n], 平移包围盒中心到原点。
2,把包围盒缩放成[-1, 1]的立方体。
透视投影
1,把视锥体压缩成立方体。
2,做正交投影。
视锥体压缩成立方体
根据相似三角形可得出任何一个点挤压后的值
通过观察可以得到两个特点:
1,近平面上任意一点挤压后不会改变。
2,远平面上任意一点挤压后其z值不变。
代入近平面上任意一点有:
可以得出变换矩阵的第三行为:
代入远平面上任意一点有:
或者代入远平面的中心点可以快速得到:
可以得出:
根据
可以得出: