跳到正文

Bézier曲线与de Casteljau

55 分钟

Bézier曲线与de Casteljau

从一幅错误图像开始

先别背公式。把现象放到屏幕上:对三次Bézier在t=.25/.5求值并输出左右子曲线控制点。图形学里的黑屏、裂缝、闪烁、镜像、错误高光或噪声都只是最终症状。你要沿数据流逆向追踪:输入几何在哪个坐标系,矩阵按什么约定组合,连续图元怎样变成离散样本,属性在哪个空间插值,光和材质用什么单位,最终颜色何时进入显示编码。不能用“显卡会画出来”代替机制。
(长段唯一锚点:CG-06-02-Bézier曲线与de Casteljau。)

本节真正要掌握的是:Bernstein基形成凸组合,de Casteljau用重复线性插值稳定求点并支持分割。请把它写成输入对象、公式/算法、输出对象和不变量四部分。若是几何算法,写坐标、绕序和退化条件;若是渲染算法,写采样位置、PDF或可见性;若是管线阶段,写前后空间和资源状态。(唯一锚点:图形学6-2《Bézier曲线与de Casteljau》。)
(长段唯一锚点:CG-06-02-Bézier曲线与de Casteljau。)

固定坐标、单位与约定

在纸上先列世界、观察、裁剪、NDC、屏幕或切线空间,标出向量是行还是列、矩阵乘法顺序、坐标手性、屏幕原点、y轴方向、深度范围和像素中心。围绕Bézier曲线与de Casteljau,每个量旁写所在空间与单位。图形错误常不是公式不会,而是把不同空间的量直接相乘。
(长段唯一锚点:CG-06-02-Bézier曲线与de Casteljau。)

再写三个不变量:例如重心权重和为1、法线与切向垂直、深度测试与绘制顺序无关、BRDF半球能量不增、PDF非负且积分为1。关键边界是:曲线只在端点插值控制多边形,其余控制点通常不在曲线上。把它改成具体输入和错误输出,才能证明你理解条件。(约定锚点:CG-06-02。)
(长段唯一锚点:CG-06-02-Bézier曲线与de Casteljau。)

跟我逐阶段算一遍

执行实验:对三次Bézier在t=.25/.5求值并输出左右子曲线控制点。固定最小场景和所有输入数值;先用手算或清晰参考实现得到一个中间结果,再逐阶段记录矩阵后顶点、裁剪状态、重心、深度、UV、法线、可见度和线性颜色。只比较最终PNG会把首个错误扩散成许多像素,逐阶段证据才能区分几何、采样与着色。
(长段唯一锚点:CG-06-02-Bézier曲线与de Casteljau。)

本节做一个工作量检查:若处理6个顶点、每个像素1个样本,在题设的一像素一属性简化模型下核心组合数是 6×1=6。这个数字不代表真实GPU时间;裁剪、覆盖面积、缓存、分支、并行和纹理访问都会改变成本。公式价值是公开假设,不是冒充性能承诺。(计算锚点:Bézier曲线与de Casteljau。)
(长段唯一锚点:CG-06-02-Bézier曲线与de Casteljau。)

分三轮把这一节真正做会

第一步,先构造Bézier曲线与de Casteljau的最小输入:明确对象所在空间、矩阵与向量约定、采样位置、边界规则和预期不变量;把贯穿任务“对三次Bézier在t=.25/.5求值并输出左右子曲线控制点”缩成一个能手算的场景。接着,依据“Bernstein基形成凸组合,de Casteljau用重复线性插值稳定求点并支持分割”逐项变换或计算,保留每个中间坐标、权重、深度、方向、概率或颜色,不允许从输入直接跳到最终图片。最后,把数值送入光栅、着色、射线或显示阶段,并针对“曲线只在端点插值控制多边形,其余控制点通常不在曲线上”制作一个失败版本;比较正确与失败结果,定位首个偏差,再用尺度、极端值或顺序变化复核结论。(推进链唯一锚点:Bézier曲线与de Casteljau-6-2。)
(长段唯一锚点:CG-06-02-Bézier曲线与de Casteljau。)

可运行实验怎样设计

代码题使用Python标准库,从标准输入读取并输出稳定数值或小网格,不访问外网、不依赖GPU和图形窗口。几何题固定浮点容差与边界规则,光栅题固定像素中心和top-left约定,射线题固定t区间,蒙特卡洛题直接读取给定样本而非随机生成。发布前每个参考实现运行至少四组测试。
(长段唯一锚点:CG-06-02-Bézier曲线与de Casteljau。)

你要补第五组测试:零长度向量、退化三角形、w接近零、共边像素、纹理边界、背光、擦边射线、零PDF或大时间步任选一项。优化版本必须逐输出比对参考模型。伪代码、只看图片和依赖某块显卡的程序都不算在线可运行实验。(实验锚点:Bézier曲线与de Casteljau。)
(长段唯一锚点:CG-06-02-Bézier曲线与de Casteljau。)

数值误差与失败边界

主动把输入推到边界:让三点几乎共线、相机向上与前向平行、三角形穿近裁剪面、射线擦过球、粗糙度趋零或弹簧步长变大。先预测哪个分母、判别式、边函数或能量项会不稳定,再运行模型。epsilon必须与尺度和算法含义相关,不能在所有比较中随手加同一个常数。
(长段唯一锚点:CG-06-02-Bézier曲线与de Casteljau。)

遇到画面错误,保留线框、法线、深度、UV、可见度和各光照分量调试视图。每个视图只验证一组假设;如果深度正确而颜色错,就不应继续怀疑MVP。错误定位的目标是找到第一项不满足不变量的中间量。(失败锚点:Bézier曲线与de Casteljau。)
(长段唯一锚点:CG-06-02-Bézier曲线与de Casteljau。)

与前后章节建立联系

向前追问本节依赖的向量、坐标、采样或数据结构,向后追问它怎样影响插值、可见性、材质、光线、动画或GPU阶段。画至少三条因果箭头并写空间或测度。例如非均匀缩放若错误变换法线,会改变N·L,再改变BRDF结果,最后让阴影边界附近出现不合理亮度。
(长段唯一锚点:CG-06-02-Bézier曲线与de Casteljau。)

同一症状可能有多个原因:纹理游动可能来自透视插值、UV接缝或mipmap导数;黑点可能来自自交、零向量、NaN或色调映射。下一项检查要能区分至少两个假设,而不是反复调参数。(连接锚点:Bézier曲线与de Casteljau。)

在线练习与严格验收

本节至少绑定单选、多选和计算题,部分课时另有真实代码实验。单选先圈坐标空间和约定,多选逐项找反例,计算题保留中间向量与单位,代码题通过全部测试并新增退化输入。章节卷、期中、期末、几何和渲染专项使用独立题池,不能靠记随课答案通过。

错题按空间混淆、矩阵顺序、绕序边界、透视插值、浮点退化、能量/PDF、可见性、时间积分或资源状态分类。更换坐标、提交顺序、样本或时间步重做;仍能重建算法才算迁移。(练习锚点:Bézier曲线与de Casteljau。)

下课前闭卷自检

一,列出Bézier曲线与de Casteljau输入输出所在空间。二,写核心公式或伪状态机及不变量。三,复述“Bernstein基形成凸组合,de Casteljau用重复线性插值稳定求点并支持分割”的适用条件。四,为“对三次Bézier在t=.25/.5求值并输出左右子曲线控制点”补一个退化测试。五,用具体输入解释“曲线只在端点插值控制多边形,其余控制点通常不在曲线上”。六,指出一个数值误差来源。七,画它与前后两节的因果连接。
(长段唯一锚点:CG-06-02-Bézier曲线与de Casteljau。)

若答案仍是“矩阵变换一下”“GPU插值”“多采样就更真实”,回到中间缓冲和数值推演,写出谁在何空间用什么公式产生哪个样本。合格不是能认图,而是能从一个坏像素定位首个错误阶段。(自检锚点:Bézier曲线与de Casteljau。)

Practice

本课练习

6

先独立作答再提交;编程题会在隔离沙箱中真实编译、运行并对拍。

1单选:Bézier曲线与de Casteljau 3

验收Bézier曲线与de Casteljau的实验“对三次Bézier在t=.25/.5求值并输出左右子曲线控制点”时,哪项操作能形成可复核证据?

登录 后答题可以领小红花
2多选:Bézier曲线与de Casteljau 3

严格验收Bézier曲线与de Casteljau时,哪些材料不可缺少?

多选题:必须选全正确项,漏选或多选均不得分。

登录 后答题可以领小红花
3计算:Bézier曲线与de Casteljau 3

围绕Bézier曲线与de Casteljau建立简化工作量:处理6个顶点,每个顶点对应1个独立样本组合;忽略裁剪、缓存与并行,共执行多少次顶点-样本组合?

登录 后答题可以领小红花
4可运行图形实验:de Casteljau求值 5

实现de Casteljau求值。使用Python 3标准输入输出,不得依赖GPU、窗口、图像库、外网或第三方包。

登录 后答题可以领小红花
5U06独立题03:Bézier曲线与de Casteljau 4

围绕Bézier曲线与de Casteljau的简化工作量:6个顶点各与4个独立样本组合,忽略裁剪、缓存与并行。共有多少次组合?

登录 后答题可以领小红花
6FINAL独立题01:Bézier曲线与de Casteljau 4

严格验收Bézier曲线与de Casteljau时,哪项操作最能定位首个错误阶段?

登录 后答题可以领小红花