跳到主要内容
transform-math · 课程
从引导学习开始

建议顺序 08 · 数学、变换与动画

Transform Math:矩阵错一行,画面就会说谎

位置、方向、父子层级与插值要通过不变量来检查。

把平移、旋转、缩放和层级分别打开,观察矩阵乘法顺序如何改变结果。

未完成

这一课的入口

按你现在的状态开始

内容只有一份。入口只改变阅读顺序,不会把技术结论拆成“简单版”和“专家版”。

直接看代码

空间与数学 · 先找到画面里的对象和方向,再进入空间、符号、公式与代码。

  • 找对象
  • 认表示
  • 换空间
  • 看极值
  • 对公式

引导学习 · 空间与数学

先找到画面里的对象和方向,再进入空间、符号、公式与代码。

  1. 01 找对象
  2. 02 认表示
  3. 03 换空间
  4. 04 看极值
  5. 05 对公式

学习目标

你要能够解释什么

能解释局部到世界到观察到裁剪的变换链,并定位常见的 handedness 与顺序错误。

Interview evidence

题库练习

把这一节课的画面证据,接回 PDF 里的原题。先做一个小预测,再去题目页整理成自己的回答。

  • Q30 math

    Quaternion 旋转

    先自己猜:这道题在考什么?

    参考答案:绕单位轴 a、角度 θ 的四元数可写成 (a sin(θ/2), cos(θ/2)),向量通过 q(v,0)q⁻¹ 旋转。引擎偏好它是因为组合和插值稳定、避免欧拉角万向节锁;实现仍需归一化、明确乘法顺序和坐标系。

    可观察证据:只改一个参数,记下画面变化,再写一句“所以它说明了什么”。

  • Q31 math

    向量夹角与精度

    先自己猜:这道题在考什么?

    参考答案:两向量夹角先归一化,再用 acos(clamp(dot(a,b),-1,1));若只是阈值,直接比较 dot 更便宜。Shader 精度问题先查空间、长度、范围和非法输入,再做 clamp/重排/精度选择,并用目标设备复测。

    可观察证据:只改一个参数,记下画面变化,再写一句“所以它说明了什么”。

  • Q33 math

    齐次坐标

    先自己猜:这道题在考什么?

    参考答案:齐次坐标用第四维 w 把仿射变换和投影统一到矩阵乘法:点通常 w=1,会受到平移;方向 w=0,不应被平移;clip 后再除以 w 得 NDC。法线要用逆转置并归一化。

    可观察证据:只改一个参数,记下画面变化,再写一句“所以它说明了什么”。

  • Q34 math

    Skinning 权重

    先自己猜:这道题在考什么?

    参考答案:顶点先由 inverse bind 从模型姿态回到骨骼局部,再乘当前骨骼矩阵,按归一化权重混合,最后乘 model/world。检查权重和、bind pose、矩阵空间和法线;权重 0.35 到 0.8 的变化应可在实验中观察。

    可观察证据:只改一个参数,记下画面变化,再写一句“所以它说明了什么”。

  • Q35 math

    Bezier 曲线

    先自己猜:这道题在考什么?

    参考答案:三次 Bezier 用四个控制点和 t∈[0,1] 插值位置/切线;t 不等于距离,所以需要弧长采样来做匀速。编辑器工具要有控制点约束、Undo、序列化和运行时一致性。

    可观察证据:只改一个参数,记下画面变化,再写一句“所以它说明了什么”。

  • Q36 math

    IK 校正

    先自己猜:这道题在考什么?

    参考答案:我先检查目标可达域、骨骼长度/轴向、pole、关节限位、bind pose 和空间,再调迭代。不可达时保留约束并显示误差,自动脚本输出修正建议和回滚,不把扭曲的末端硬贴到目标。

    可观察证据:只改一个参数,记下画面变化,再写一句“所以它说明了什么”。

实验循环

按顺序做一次实验

  1. Step 1

    只做局部变换

    改什么
    TRS = local
    怎么做
    固定父节点,分别调整位置、旋转、缩放。
    你会看到
    局部坐标中的轴与对象一起移动。
    它代表
    局部空间描述资产本身,不能直接当作世界位置。

    Code anchor · transform-math · local matrix

  2. Step 2

    叠加父子层级

    改什么
    Parent rotation / scale
    怎么做
    先旋转父节点,再改变子节点位置。
    你会看到
    子节点沿父节点的基底移动,缩放也会传递。
    它代表
    矩阵乘法顺序编码了层级语义。

    Code anchor · transform-math · compose

  3. Step 3

    比较插值方法

    改什么
    Euler / Quaternion / Matrix
    怎么做
    在同一时间轴上比较三种插值。
    你会看到
    欧拉角可能产生万向节锁,四元数更平滑。
    它代表
    表示方式会影响动画路径,不只是存储格式。

    Code anchor · transform-math · interpolation

快速复习

用三分钟找回因果链

这里没有第二套答案。以下内容直接来自上面的课程事实,方便你在面试前快速检索。

一句话核心

把平移、旋转、缩放和层级分别打开,观察矩阵乘法顺序如何改变结果。

  1. 局部空间描述资产本身,不能直接当作世界位置。

    画面证据:局部坐标中的轴与对象一起移动。

  2. 矩阵乘法顺序编码了层级语义。

    画面证据:子节点沿父节点的基底移动,缩放也会传递。

  3. 表示方式会影响动画路径,不只是存储格式。

    画面证据:欧拉角可能产生万向节锁,四元数更平滑。

代码定位

  • transform-math · local matrix
  • transform-math · compose
  • transform-math · interpolation
打开代码页