三维旋转后平移
注意为先旋转后平移,因为写开为旋转后的坐标加上tx,ty,tz。
绕x,y,z轴旋转
注意绕y方向的旋转矩阵不一样,因为逆时针和右手系,x轴对应的是yoz平面,z轴对应的是xoz平面,而y轴对应的是zox平面。
绕任意轴旋转
R x y z ( α , β , γ ) = R x ( α ) R y ( β ) R z ( γ ) R_{xyz}(\alpha,\beta,\gamma) = R_{x}(\alpha)R_{y}(\beta)R_{z}(\gamma) Rxyz(α,β,γ)=Rx(α)Ry(β)Rz(γ)
轴过原点,复杂旋转为三个旋转的乘积。 α , β , γ \alpha,\beta,\gamma α,β,γ也被称为欧拉角。如果为不在原点的轴,需要先平移到原点,做旋转,再做平移的逆变换。
观测变换(view/camera)
需要相机位置、朝向和向上朝向的向量来唯一确定相机位置。为了运算方便,把相机固定在原点,朝向-z方向,朝上为y方向。
假设原始位置为 e e e,朝向为 g g g,向上方向为 t t t。
- 移动到原点
- 旋转g到-z
- 旋转t到Y
- 旋转(g x t)到X
旋转矩阵为三个矩阵的乘积,可以通过待定系数法求得,可以通过单位向量验证其正确性。
正交投影
- 将长方体平移并且缩放到规范正方体 [ − 1 , 1 ] 3 [-1,1]^3 [−1,1]3,因为相机在原点(可视区域为规范正方体),然后直接抛弃掉z坐标即可。
数学表达式如上图。
透视投影
M 透 视 = M 正 交 M 挤 压 矩 阵 M_{透视} = M_{正交}M_{挤压矩阵} M透视=M正交M挤压矩阵
通过近平面上的点投影不变,远处的中心点投影不变可列方程。