Games101学习笔记:Lecture3 Transformation



引言


在计算机图形学中, Transformation(变换)是构建和处理3D场景的核心概念。它不仅决定了物体在虚拟空间中的位置和姿态,还直接影响着渲染管线的效率和最终图像的视觉效果。Games101的第三讲深入探讨了从2D到3D的坐标变换体系,系统讲解了平移、旋转、缩放等基础变换的原理与实现方法,并引入了齐次坐标这一关键数学工具,为后续的图形渲染管线奠定了理论基础。


一、为什么需要变换?


1.1 图形学中的坐标体系


在图形学中,坐标体系是描述物体位置和空间关系的数学框架。不同的坐标体系服务于不同的计算需求:






模型坐标系(Model Space):每个物体拥有独立的坐标系,原点通常位于物体中心,便于描述局部几何特征。




世界坐标系(World Space):所有物体共享的全局坐标系,用于统一管理场景中的物体位置和关系。




相机坐标系(Camera Space):以相机为原点的坐标系,用于定义视锥体和裁剪操作。




屏幕坐标系(Screen Space):最终渲染到显示设备的坐标系,通常以像素为单位。


1.2 坐标变换的意义


坐标变换的本质是将物体从一个坐标系映射到另一个坐标系。例如:






将模型从模型坐标系转换到世界坐标系,实现场景组装。




将世界坐标系中的物体转换到相机坐标系,实现视角控制。




将3D坐标投影到2D屏幕,实现透视效果。


1.3 变换的数学表示


变换通过矩阵运算实现,其核心思想是: $$ \mathbf{v}' = \mathbf{M} \cdot \mathbf{v} $$ 其中:






$\mathbf{v}$ 是原坐标(3×1向量)




$\mathbf{M}$ 是变换矩阵(3×3或4×4矩阵)




$\mathbf{v}'$ 是变换后的坐标


二、2D变换:基础操作


2.1 平移(Translation)


平移是改变物体位置的变换,其矩阵形式为: $$ \mathbf{T} = \begin{bmatrix} 1 & 0 & t_x \ 0 & 1 & t_y \ 0 & 0 & 1 \end{bmatrix} $$






$t_x$ 和 $t_y$ 分别表示x和y方向的平移量。




特点:平移不可通过3×3矩阵的线性变换实现,需引入齐次坐标。


2.2 旋转(Rotation)


旋转是绕某点改变物体方向的变换,其矩阵形式为: $$ \mathbf{R}(\theta) = \begin{bmatrix} \cos\theta & -\sin\theta & 0 \ \sin\theta & \cos\theta & 0 \ 0 & 0 & 1 \end{bmatrix} $$






$\theta$ 为旋转角度(逆时针为正)。




旋转中心默认为坐标系原点,可通过组合平移实现绕任意点旋转。


2.3 缩放(Scaling)


缩放是改变物体尺寸的变换,其矩阵形式为: $$ \mathbf{S}(s_x, s_y) = \begin{bmatrix} s_x & 0 & 0 \ 0 & s_y & 0 \ 0 & 0 & 1 \end{bmatrix} $$






$s_x$ 和 $s_y$ 分别表示x和y方向的缩放因子。




缩放中心默认为原点,可通过组合平移实现绕任意点缩放。


2.4 变换的复合与顺序


在实际应用中,多个变换需按特定顺序组合:






先缩放后旋转:缩放会改变旋转的效果(如非均匀缩放导致物体变形)。




先旋转后缩放:缩放仅影响旋转后的坐标,保持几何形状。


示例:绕点$(x_0, y_0)$旋转$\theta$的复合变换: $$ \mathbf{T} = \mathbf{T}(x_0, y_0) \cdot \mathbf{R}(\theta) \cdot \mathbf{T}(-x_0, -y_0) $$


三、3D变换:扩展与挑战


3.1 3D平移


平移矩阵扩展为: $$ \mathbf{T} = \begin{bmatrix} 1 & 0 & 0 & t_x \ 0 & 1 & 0 & t_y \ 0 & 0 & 1 & t_z \ 0 & 0 & 0 & 1 \end{bmatrix} $$


3.2 3D旋转


3D旋转需绕某一轴进行,其矩阵形式为:






绕x轴旋转: $$ \mathbf{R}_x(\theta) = \begin{bmatrix} 1 & 0 & 0 & 0 \ 0 & \cos\theta & -\sin\theta & 0 \ 0 & \sin\theta & \cos\theta & 0 \ 0 & 0 & 0 & 1 \end{bmatrix} $$




绕y轴旋转: $$ \mathbf{R}_y(\theta) = \begin{bmatrix} \cos\theta & 0 & \sin\theta & 0 \ 0 & 1 & 0 & 0 \ -\sin\theta & 0 & \cos\theta & 0 \ 0 & 0 & 0 & 1 \end{bmatrix} $$




绕z轴旋转: $$ \mathbf{R}_z(\theta) = \begin{bmatrix} \cos\theta & -\sin\theta & 0 & 0 \ \sin\theta & \cos\theta & 0 & 0 \ 0 & 0 & 1 & 0 \ 0 & 0 & 0 & 1 \end{bmatrix} $$


3.3 3D缩放


缩放矩阵扩展为: $$ \mathbf{S}(s_x, s_y, s_z) = \begin{bmatrix} s_x & 0 & 0 & 0 \ 0 & s_y & 0 & 0 \ 0 & 0 & s_z & 0 \ 0 & 0 & 0 & 1 \end{bmatrix} $$


3.4 3D变换的复合


3D变换的复合顺序直接影响结果:






先旋转后平移:旋转以物体局部坐标系为基准。




先平移后旋转:旋转以世界坐标系为基准。


四、齐次坐标:统一变换的数学工具


4.1 齐次坐标的引入


齐次坐标通过增加一个维度(通常为$w$)来统一表示平移、旋转和缩放: $$ \mathbf{v} = \begin{bmatrix} x \ y \ z \ w \end{bmatrix} $$






当$w=1$时,表示三维点:$(x/w, y/w, z/w)$。




当$w=0$时,表示向量(无位置信息)。


4.2 齐次坐标的优势






统一表示:所有变换可表示为4×4矩阵的乘法。




逆变换:通过矩阵求逆实现。




透视投影:支持齐次除法实现透视效果。


4.3 齐次坐标下的变换矩阵






平移矩阵: $$ \mathbf{T} = \begin{bmatrix} 1 & 0 & 0 & t_x \ 0 & 1 & 0 & t_y \ 0 & 0 & 1 & t_z \ 0 & 0 & 0 & 1 \end{bmatrix} $$




旋转矩阵: $$ \mathbf{R}_x(\theta) = \begin{bmatrix} 1 & 0 & 0 & 0 \ 0 & \cos\theta & -\sin\theta & 0 \ 0 & \sin\theta & \cos\theta & 0 \ 0 & 0 & 0 & 1 \end{bmatrix} $$




缩放矩阵: $$ \mathbf{S}(s_x, s_y, s_z) = \begin{bmatrix} s_x & 0 & 0 & 0 \ 0 & s_y & 0 & 0 \ 0 & 0 & s_z & 0 \ 0 & 0 & 0 & 1 \end{bmatrix} $$


五、变换顺序与矩阵乘法


5.1 矩阵乘法的结合性


变换矩阵的乘法满足结合律,但不满足交换律: $$ \mathbf{M}_1 \cdot (\mathbf{M}_2 \cdot \mathbf{M}_3) = (\mathbf{M}_1 \cdot \mathbf{M}_2) \cdot \mathbf{M}_3 $$ $$ \mathbf{M}_1 \cdot \mathbf{M}_2 \neq \mathbf{M}_2 \cdot \mathbf{M}_1 $$


5.2 变换顺序的物理意义






先旋转后平移:旋转以物体局部坐标系为基准,平移以世界坐标系为基准。




先平移后旋转:旋转以世界坐标系为基准,平移以旋转后的坐标系为基准。


5.3 示例:绕任意点旋转






将物体平移至原点:$\mathbf{T}(-x_0, -y_0, -z_0)$。




执行旋转:$\mathbf{R}(\theta)$。




将物体平移回原位置:$\mathbf{T}(x_0, y_0, z_0)$。


复合变换矩阵: $$ \mathbf{M} = \mathbf{T}(x_0, y_0, z_0) \cdot \mathbf{R}(\theta) \cdot \mathbf{T}(-x_0, -y_0, -z_0) $$


六、变换的应用场景


6.1 模型变换(Model Transformation)


将模型从模型坐标系转换到世界坐标系,包括:






位置调整(平移)




姿态调整(旋转)




尺寸调整(缩放)


6.2 视图变换(View Transformation)


将世界坐标系中的物体转换到相机坐标系,包括:






相机位置调整(平移)




相机方向调整(旋转)


6.3 投影变换(Projection Transformation)


将3D坐标投影到2D屏幕,包括:






正交投影(Orthographic Projection)




透视投影(Perspective Projection)


七、变换的优化与实现


7.1 变换矩阵的存储


在图形API中,变换矩阵通常以列优先顺序存储: $$ \mathbf{M} = \begin{bmatrix} m_{11} & m_{12} & m_{13} & m_{14} \ m_{21} & m_{22} & m_{23} & m_{24} \ m_{31} & m_{32} & m_{33} & m_{34} \ m_{41} & m_{42} & m_{43} & m_{44} \end{bmatrix} $$


7.2 变换的层次结构


复杂场景中,物体通常以层次结构组织:






父节点的变换会影响子节点。




子节点的变换是相对于父节点的坐标系。


7.3 变换的逆运算


逆变换用于实现撤销操作或反向计算: $$ \mathbf{v} = \mathbf{M}^{-1} \cdot \mathbf{v}' $$


八、总结与展望


8.1 核心知识点回顾






2D变换:平移、旋转、缩放及其矩阵表示。




3D变换:扩展至三维空间,引入绕任意轴旋转。




齐次坐标:统一表示变换,支持透视投影。




变换顺序:影响最终结果,需谨慎设计。


8.2 进阶方向






四元数:用于表示旋转,避免万向节锁问题。




骨骼动画:通过层次变换实现角色动画。




物理模拟:结合变换实现刚体动力学。


8.3 实践建议






使用图形API(如OpenGL或DirectX)内置的变换函数。




调试时,通过打印变换矩阵验证计算结果。




理解变换的数学本质,避免盲目套用公式。


结语


Transformation是计算机图形学的基石,它不仅是构建虚拟世界的数学工具,更是连接几何与视觉的桥梁。通过深入理解变换的原理和实现方法,我们能够更高效地构建复杂的3D场景,实现从简单几何体到逼真虚拟现实的跨越。在后续的学习中,变换将贯穿于渲染管线的每一个环节,成为我们探索图形学奥秘的钥匙。