[简化版 GAMES 101]计算机图形学:二维变换上
-
- [Bilibili 同步视频](#Bilibili 同步视频)
- [📌 开篇小提示:两个关键须知](#📌 开篇小提示:两个关键须知)
- [📚 前置基石:向量与矩阵的核心回顾](#📚 前置基石:向量与矩阵的核心回顾)
- [🎯 为何要学变换?图形世界的核心驱动力](#🎯 为何要学变换?图形世界的核心驱动力)
-
- [✨ 动画制作的核心骨架](#✨ 动画制作的核心骨架)
- [✨ 三维成像的核心铺垫](#✨ 三维成像的核心铺垫)
- [🔍 二维线性变换:平面图形的四大核心魔法](#🔍 二维线性变换:平面图形的四大核心魔法)
- [\\begin{bmatrix} x' \\\\ y' \\end{bmatrix}](#\begin{bmatrix} x' \ y' \end{bmatrix})
-
- [🌟 缩放变换:给图形赋予可大可小的弹性](#🌟 缩放变换:给图形赋予可大可小的弹性)
- [🌟 反射变换:镜面里的对称镜像](#🌟 反射变换:镜面里的对称镜像)
- [🌟 切变变换:平面的柔性拉扯](#🌟 切变变换:平面的柔性拉扯)
- [🌟 旋转变换:绕原点的优雅圆周舞步](#🌟 旋转变换:绕原点的优雅圆周舞步)
- [💡 齐次坐标:为统一变换而生的天才设计](#💡 齐次坐标:为统一变换而生的天才设计)
-
- [🌟 齐次坐标的核心规则](#🌟 齐次坐标的核心规则)
- [🌟 平移变换的统一表达](#🌟 平移变换的统一表达)
- [🌟 齐次坐标的运算之美](#🌟 齐次坐标的运算之美)
- [⚙️ 变换的进阶玩法:逆变换、组合与分解](#⚙️ 变换的进阶玩法:逆变换、组合与分解)
-
- [🌟 逆变换:撤销操作的数学实现](#🌟 逆变换:撤销操作的数学实现)
- [🌟 变换组合:顺序决定结果,矩阵的叠加魔法](#🌟 变换组合:顺序决定结果,矩阵的叠加魔法)
- [🌟 变换分解:把复杂问题拆解为已知解法](#🌟 变换分解:把复杂问题拆解为已知解法)
- [🌌 升维延伸:三维变换的初步探索](#🌌 升维延伸:三维变换的初步探索)
Bilibili 同步视频
在数字图形的世界里,小到一张图片的缩放翻转,大到一段动画里的灵动动作,所有视觉变化的背后,都藏着一套严谨又优雅的底层逻辑------图形学变换。它是线性代数与视觉艺术的第一次深度碰撞,也是我们推开三维图形世界大门的必经之路。今天,我们就从基础铺垫出发,层层拆解二维变换的核心法则,解锁齐次坐标为图形学带来的革命性突破。
📌 开篇小提示:两个关键须知
在正式踏入变换的世界前,有两个实用细节需要提前知晓:
其一,配套的入门作业0已进入筹备收尾阶段,很快就会和大家见面,作业仅为基础环境配置,无复杂实操内容,大家可以随时关注消息通知;
其二,作业提交系统有明确的邮箱限制,QQ邮箱会被系统自动过滤拦截,注册时请更换其他类型的邮箱,避免影响后续作业提交。
📚 前置基石:向量与矩阵的核心回顾
想要吃透变换的本质,必须先夯实上一阶段的核心基础------向量与矩阵,它们是所有变换操作的"通用语言"。
上一阶段,我们明确了向量的核心定义与基础加乘操作,其中两种乘法形式,更是图形学里判断空间关系的核心抓手:
-
点乘:两个向量的点乘结果有正负之分,我们可以凭借这一特性,精准判断两个向量的前后相对关系;
-
叉乘:两个向量叉乘会生成一个全新的向量,通过这个新向量的朝向,我们便能轻松判定两个向量的左右相对位置。
同时,矩阵的基础计算规则,以及向量、矩阵在图形学中的基础应用,也为本次变换的学习筑牢了根基------所有的变换,最终都将落地为矩阵与向量的运算,这是贯穿始终的核心逻辑。
🎯 为何要学变换?图形世界的核心驱动力
很多人会问,看似简单的变换,为何会成为图形学的核心必修课?答案藏在它无处不在的应用场景里,无论是动态动画的制作,还是三维场景的成像,都离不开变换的底层支撑。
✨ 动画制作的核心骨架
变换是所有动态效果的底层逻辑:
-
场景里平滑移动的摄像机,沿着曲线完成的丝滑运镜,本质是变换在定义位置的变化;
-
动画里跳舞的机器人,关节处灵活的旋转与联动,甚至是复杂的肢体动作,都可以用变换来描述每一处的旋转与位移,这也是后续逆运动学知识的重要铺垫;
-
皮克斯经典的台灯开场动画里,蹦跳的台灯压扁字母的形变效果,正是缩放变换与其他变换结合的成果。
可以说,绝大多数动画效果,都是由不同的基础变换组合而成的。
✨ 三维成像的核心铺垫
我们身处的三维世界,最终要呈现在二维的屏幕上,这一过程的核心,就是从三维到二维的投影变换。而投影变换的底层逻辑,正是建立在本次学习的基础变换之上。只有吃透了基础变换的规则,我们才能真正理解,三维空间里的场景,是如何一步步变成我们屏幕上的二维画面的。
🔍 二维线性变换:平面图形的四大核心魔法
我们先从最基础的二维空间入手,拆解平面里的四大基础变换。它们有一个共同的名字------线性变换,核心特征是:所有变换都可以写成「矩阵×向量」的形式,即
$\begin{bmatrix} x' \ y' \end{bmatrix}
\begin{bmatrix} a & b \ c & d \end{bmatrix}
\begin{bmatrix} x \ y \end{bmatrix}$
只要找到变换前后坐标的对应关系,就能推导出专属的变换矩阵,这也是线性变换的核心解题思路。
🌟 缩放变换:给图形赋予可大可小的弹性
缩放变换是最直观的基础变换,分为均匀缩放 与非均匀缩放两种形式,我们日常在图像编辑软件里对图片的放大缩小,本质就是这一变换的应用。
-
均匀缩放:横轴与纵轴使用相同的缩放系数 s s s ,对应的变换矩阵为对角阵:
s 0 0 s \] \\begin{bmatrix} s \& 0 \\\\ 0 \& s \\end{bmatrix} \[s00s
当 s = 0.5 s=0.5 s=0.5 时,图形就会在横纵两个方向都缩小为原来的1/2。
-
非均匀缩放:横轴与纵轴使用不同的缩放系数 s x s_x sx 、 s y s_y sy ,只需将对角阵的元素替换为对应系数即可:
s x 0 0 s y \] \\begin{bmatrix} s_x \& 0 \\\\ 0 \& s_y \\end{bmatrix} \[sx00sy
哪怕横轴缩小、纵轴不变,也能通过这个矩阵精准实现。
🌟 反射变换:镜面里的对称镜像
反射变换也叫镜像变换,最经典的就是沿y轴的对称翻转:图形经过变换后,y坐标保持不变,x坐标取反,对应的变换矩阵为:
− 1 0 0 1 \] \\begin{bmatrix} -1 \& 0 \\\\ 0 \& 1 \\end{bmatrix} \[−1001
只需这一个矩阵,就能完美复刻图形的镜面效果,实现左右翻转的对称变换。
🌟 切变变换:平面的柔性拉扯
切变变换是更具弹性的形变,就像我们拽着图形的上边沿水平方向拉伸,图形会发生倾斜,但所有点的纵坐标始终保持不变,只有横坐标随纵坐标发生线性变化。
它的坐标变换公式为 x ′ = x + a y x' = x + ay x′=x+ay , y ′ = y y' = y y′=y ,对应的变换矩阵为:
1 a 0 1 \] \\begin{bmatrix} 1 \& a \\\\ 0 \& 1 \\end{bmatrix} \[10a1
其中 a a a 是切变系数,决定了图形的拉伸程度。这一变换的核心,就是通过观察图形形变前后的坐标变化,找到横纵坐标的对应关系,进而推导出变换矩阵。
🌟 旋转变换:绕原点的优雅圆周舞步
旋转变换是线性变换中最具美感的一种,我们默认两个核心规则:无特殊说明时,旋转中心为坐标原点,旋转方向为逆时针。
想要推导旋转矩阵,无需死记硬背公式,只需借助两个特殊的单位向量 ( 1 , 0 ) (1,0) (1,0) 和 ( 0 , 1 ) (0,1) (0,1) ,结合三角函数的旋转规律,就能轻松完成推导。最终,绕原点逆时针旋转θ角的变换矩阵为:
cos θ − sin θ sin θ cos θ \] \\begin{bmatrix} \\cos\\theta \& -\\sin\\theta \\\\ \\sin\\theta \& \\cos\\theta \\end{bmatrix} \[cosθsinθ−sinθcosθ
这一矩阵的核心逻辑是:既然线性变换对平面内所有点都成立,那么对特殊点成立的规律,自然也适用于整个平面。
💡 齐次坐标:为统一变换而生的天才设计
当我们掌握了四大线性变换后,会遇到一个无法回避的痛点:平移变换。
平移的公式非常简单: x ′ = x + t x x' = x + t_x x′=x+tx , y ′ = y + t y y' = y + t_y y′=y+ty ,但它却无法写成2×2矩阵与向量相乘的形式,不属于线性变换。如果把平移单独对待,整个变换体系就会变得割裂------我们不得不为平移单独设计一套运算规则,无法和其他线性变换统一。
为了解决这个问题,齐次坐标应运而生,它用一个极其巧妙的维度增加,彻底统一了所有二维变换的表达形式。
🌟 齐次坐标的核心规则
齐次坐标为二维坐标增加了第三个维度,用一个简单的规则,清晰区分了点 与向量:
-
二维点 的齐次坐标表示为: [ x y 1 ] T \begin{bmatrix} x & y & 1 \end{bmatrix}^T [xy1]T
-
二维向量 的齐次坐标表示为: [ x y 0 ] T \begin{bmatrix} x & y & 0 \end{bmatrix}^T [xy0]T
这个设计的巧思,首先体现在对向量特性的完美适配:向量代表的是方向与大小,具有平移不变性------无论怎么平移,向量的方向和长度都不会改变。末尾的0,恰好让向量在经过平移变换时,不会受到平移量的影响,完美契合了向量的物理意义。
🌟 平移变换的统一表达
有了齐次坐标,平移变换终于可以写成矩阵相乘的形式了。二维平移变换的齐次矩阵为:
1 0 t x 0 1 t y 0 0 1 \] \\begin{bmatrix} 1 \& 0 \& t_x \\\\ 0 \& 1 \& t_y \\\\ 0 \& 0 \& 1 \\end{bmatrix} 100010txty1 用这个矩阵乘以点的齐次坐标 \[ x y 1 \] T \\begin{bmatrix} x \& y \& 1 \\end{bmatrix}\^T \[xy1\]T ,得到的结果正是 \[ x + t x y + t y 1 \] T \\begin{bmatrix} x+t_x \& y+t_y \& 1 \\end{bmatrix}\^T \[x+txy+ty1\]T ,完美实现了平移效果。 至此,线性变换与平移变换终于有了统一的表达形式,这种「线性变换+平移」的组合,我们称之为**仿射变换**。二维仿射变换的齐次矩阵有着固定的优雅结构: * 左上角2×2区域:存放线性变换的矩阵 * 最后一列前两位:存放x、y方向的平移量 * 最后一行:固定为 \[ 0 0 1 \] \\begin{bmatrix} 0 \& 0 \& 1 \\end{bmatrix} \[001
🌟 齐次坐标的运算之美
齐次坐标的设计,不仅统一了变换形式,还完美适配了点与向量的运算逻辑:
-
点 - 点 = 向量:两个点的齐次坐标相减,最后一维1-1=0,恰好得到向量的齐次坐标;
-
点 + 向量 = 新点:点的齐次坐标加向量的齐次坐标,最后一维1+0=1,恰好得到新点的齐次坐标;
-
点 + 点 = 两点中点:两个点的齐次坐标相加,最后一维为2,将所有坐标除以2,就能还原为标准的点坐标,这个点正是两个原点点的中点。
一个小小的维度增加,就彻底解决了变换体系的割裂问题,堪称图形学里的天才设计。
⚙️ 变换的进阶玩法:逆变换、组合与分解
有了齐次坐标的统一表达,我们就能解锁变换的更多进阶玩法,实现更复杂的图形效果。
🌟 逆变换:撤销操作的数学实现
逆变换的逻辑非常简单:如果一个变换能让图形从A变成B,那么它的逆变换就能让图形从B变回A。在数学上,逆变换对应的正是原变换矩阵的逆矩阵------一个矩阵乘以它的逆矩阵,会得到单位矩阵,对应着「先做变换、再做逆变换,等于什么都没做」的逻辑。
🌟 变换组合:顺序决定结果,矩阵的叠加魔法
复杂的图形效果,往往是多个基础变换叠加的结果。这里有一个核心准则:变换的顺序,直接决定最终的结果。
举个最简单的例子:先让图形绕原点逆时针旋转45度,再向右平移1个单位,和先向右平移1个单位,再绕原点旋转45度,得到的结果截然不同。
这背后的本质,是矩阵乘法不满足交换律。变换的叠加,对应着矩阵的依次左乘,而矩阵的应用顺序,是从右到左的。如果我们要实现「先旋转、再平移」的效果,对应的矩阵组合就是:
M 最终 = M 平移 × M 旋转 M_{最终} = M_{平移} \times M_{旋转} M最终=M平移×M旋转
更妙的是,矩阵乘法满足结合律,我们可以先把所有变换矩阵相乘,合并成一个3×3的最终矩阵,再用这个矩阵去作用于图形上的每一个点。无论叠加多少个基础变换,最终都可以合并为一个3×3的矩阵,这也是变换矩阵最强大的特性之一。
🌟 变换分解:把复杂问题拆解为已知解法
变换不仅可以合并,还可以拆解------当我们遇到无法直接实现的复杂变换时,只需把它拆解为多个我们已经掌握的基础变换,就能轻松解决。
最经典的例子,就是绕任意点旋转。我们默认的旋转变换只能绕原点进行,那如果想要绕平面内任意一个点c旋转,该怎么做?只需三步拆解:
-
先把整个图形平移,让旋转中心点c移动到坐标原点;
-
对图形执行绕原点的旋转变换;
-
再把图形平移回去,让旋转中心点c回到原本的位置。
对应的矩阵组合,依然遵循从右到左的应用顺序: M 最终 = M 平移回原位置 × M 旋转 × M 平移到原点 M_{最终} = M_{平移回原位置} \times M_{旋转} \times M_{平移到原点} M最终=M平移回原位置×M旋转×M平移到原点 。
这种拆解思路,也是图形学里解决复杂变换问题的核心思维。
🌌 升维延伸:三维变换的初步探索
当我们吃透了二维变换的完整逻辑,三维变换的学习就有了清晰的路径------它本质是二维变换的升维延伸,核心逻辑完全一致。
为了统一三维空间里的线性变换与平移变换,我们延续齐次坐标的思路,为三维坐标增加第四个维度:
-
三维点 的齐次坐标表示为: [ x y z 1 ] T \begin{bmatrix} x & y & z & 1 \end{bmatrix}^T [xyz1]T
-
三维向量 的齐次坐标表示为: [ x y z 0 ] T \begin{bmatrix} x & y & z & 0 \end{bmatrix}^T [xyz0]T
对应的三维仿射变换,也升级为4×4的矩阵,依然延续了二维的优雅结构:左上角3×3区域存放三维线性变换矩阵,最后一列前三位存放x、y、z方向的平移量,最后一行固定为 [ 0 0 0 1 ] \begin{bmatrix} 0 & 0 & 0 & 1 \end{bmatrix} [0001] 。而它的应用逻辑,也和二维完全一致:先执行线性变换,再执行平移。

从二维平面的四大线性变换,到齐次坐标的天才设计,再到变换的组合与拆解,我们完成了图形学变换的完整入门。这套以矩阵为核心、以齐次坐标为桥梁的变换体系,正是我们后续探索三维图形世界的核心钥匙。