[简化版 GAMES 101] 计算机图形学 04:二维变换上

张开发
2026/4/21 0:38:28 15 分钟阅读

分享文章

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

更多文章