Surface Normals and Multiple Objects × Moving Camera Code Into Its Own Class
Surface Normals and Multiple Objects × Moving Camera Code Into Its Own Class:把交点几何、朝向和多对象最近命中统一成查询合同,并把相机初始化、射线生成、颜色求值与图像写出收拢为稳定接口,以公式、章专属交互和可重放故障证据独立重写。
学习目标
- 能说明Surface Normals and Multiple Objects × Moving Camera Code Into Its Own Class中的“把交点几何、朝向和多对象最近命中统一成查询合同,并把相机初始化、射线生成、颜色求值与图像写出收拢为稳定接口”,并指出公式中每个量的空间、单位或概率含义
- 能比较正常基线与“不根据入射方向翻转法线,或遍历对象时没有收紧t上界;重构时改变像素坐标或初始化顺序,导致相同场景输出发生漂移”反例,定位front_face、单位法线、对象身份和最近命中距离、公开参数、initialize派生量、首末像素射线和重构前后PPM哈希中的首个差异
- 能操作三个章专属实验,让法线、hit_record、hittable_list、camera class、initialize、render同时具备解释、视觉和练习证据
- 能修改最小实现、固定输入重放,并判断“Surface Normals and Multiple Objects的输入、公式中间量、输出与恢复结果可用同一基线复算,且Moving Camera Code Into Its Own Class的输入、公式中间量、输出与恢复结果可用同一基线复算”是否重新成立
从一个会失败的图像实验开始
Surface Normals and Multiple Objects × Moving Camera Code Into Its Own Class要回答的不是“这个名词是什么”,而是:在固定输入下,如何验证“把交点几何、朝向和多对象最近命中统一成查询合同,并把相机初始化、射线生成、颜色求值与图像写出收拢为稳定接口”,并让一个反例可重复地推翻错误实现?先写下预期像素、几何或估计量,再运行基线;只要front_face、单位法线、对象身份和最近命中距离、公开参数、initialize派生量、首末像素射线和重构前后PPM哈希无法指出差异来自哪一步,图像看起来正确也不能通过。
本页的不变量是:Surface Normals and Multiple Objects的输入、公式中间量、输出与恢复结果可用同一基线复算,且Moving Camera Code Into Its Own Class的输入、公式中间量、输出与恢复结果可用同一基线复算。反例“不根据入射方向翻转法线,或遍历对象时没有收紧t上界;重构时改变像素坐标或初始化顺序,导致相同场景输出发生漂移”只改变一个条件,因而正常、故障与恢复三次运行应能用同一输入直接比较。
原版、版次与事实来源
Surface Normals and Multiple Objects × Moving Camera Code Into Its Own Class以官方4.0.2全文核对实现顺序、公式与调试边界,并以官方源码仓库交叉检查可编译接口。课程示例为独立教学重写;固定版本后不把Vulkan、GPU管线或其他书的模板倒灌进这个纯C++路径追踪器。
六个检查词
↡法线在Surface Normals and Multiple Objects × Moving Camera Code Into Its Own Class中用于把交点几何、朝向和多对象最近命中统一成查询合同;应由front_face、单位法线、对象身份和最近命中距离确认,而不是只凭术语出现。、↡hit_record在Surface Normals and Multiple Objects × Moving Camera Code Into Its Own Class中用于把交点几何、朝向和多对象最近命中统一成查询合同;应由front_face、单位法线、对象身份和最近命中距离确认,而不是只凭术语出现。、↡hittable_list在Surface Normals and Multiple Objects × Moving Camera Code Into Its Own Class中用于把交点几何、朝向和多对象最近命中统一成查询合同;应由front_face、单位法线、对象身份和最近命中距离确认,而不是只凭术语出现。、↡camera class在Surface Normals and Multiple Objects × Moving Camera Code Into Its Own Class中用于把相机初始化、射线生成、颜色求值与图像写出收拢为稳定接口;应由公开参数、initialize派生量、首末像素射线和重构前后PPM哈希确认,而不是只凭术语出现。、↡initialize在Surface Normals and Multiple Objects × Moving Camera Code Into Its Own Class中用于把相机初始化、射线生成、颜色求值与图像写出收拢为稳定接口;应由公开参数、initialize派生量、首末像素射线和重构前后PPM哈希确认,而不是只凭术语出现。、↡render在Surface Normals and Multiple Objects × Moving Camera Code Into Its Own Class中用于把相机初始化、射线生成、颜色求值与图像写出收拢为稳定接口;应由公开参数、initialize派生量、首末像素射线和重构前后PPM哈希确认,而不是只凭术语出现。。这些词共同约束把交点几何、朝向和多对象最近命中统一成查询合同,并把相机初始化、射线生成、颜色求值与图像写出收拢为稳定接口,每个词都必须落到公式、交互状态或可重放输出,不能只出现在术语表。
原书单元与独立机制解释
Surface Normals and Multiple Objects
法线从球心指向交点,hit_record 保存t、位置、法线与正反面,hittable_list 逐对象缩短允许上界以保留最近命中。这样材质只消费稳定的命中记录,不再重复求交细节。
本单元的正式坐标是法线、hit_record、hittable_list。验证Surface Normals and Multiple Objects时,先制造“不根据入射方向翻转法线,或遍历对象时没有收紧t上界”,再检查front_face、单位法线、对象身份和最近命中距离能否把错误定位到把交点几何、朝向和多对象最近命中统一成查询合同的首个分叉。
Moving Camera Code Into Its Own Class
Moving Camera Code Into Its Own Class把分散在main中的视口计算、get_ray、ray_color与render循环迁入camera类。重构前后图像必须一致;initialize集中派生参数,render只负责按像素调度并写出结果。
本单元的正式坐标是camera class、initialize、render。验证Moving Camera Code Into Its Own Class时,先制造“重构时改变像素坐标或初始化顺序,导致相同场景输出发生漂移”,再检查公开参数、initialize派生量、首末像素射线和重构前后PPM哈希能否把错误定位到把相机初始化、射线生成、颜色求值与图像写出收拢为稳定接口的首个分叉。
先预测,再操作三个章专属实验
1. 概念与因果路径
在Surface Normals and Multiple Objects × Moving Camera Code Into Its Own Class中选择任一正式坐标,沿机制链查看它的输入、状态变化和可推翻探针。
射线、交点与章节机制
Surface Normals and Multiple Objects × Moving Camera Code Into Its Own Class
沿一条可见射线检查把交点几何、朝向和多对象最近命中统一成查询合同,并把相机初始化、射线生成、颜色求值与图像写出收拢为稳定接口,改变t时只移动采样点,不偷偷改变原点或方向。
正式概念坐标
Surface Normals and Multiple Objects / 法线
法线从球心指向交点,hit_record 保存t、位置、法线与正反面,hittable_list 逐对象缩短允许上界以保留最近命中。这样材质只消费稳定的命中记录,不再重复求交细节。
可推翻探针:front_face、单位法线、对象身份和最近命中距离
最小可重现实验
if (object.hit(r, interval(t_min, closest), rec)) {
closest = rec.t;
rec.set_face_normal(r, outward_normal);
nearest = rec;
}运行Surface Normals and Multiple Objects × Moving Camera Code Into Its Own Class时固定随机种子、输入几何、坐标约定和数值精度;记录编译命令或算法版本、输出摘要与失败条件。实验输出若依赖隐藏全局状态,必须先消除该依赖再比较。
练习与答案
练习
问题 1:公式与边界。 怎样用一个数值样本证明 中的量没有混用空间、单位或概率密度?
问题 2:正式坐标。 法线、hit_record、hittable_list、camera class、initialize、render如何进入可操作验证?
问题 3:故障恢复。 如何证明“不根据入射方向翻转法线,或遍历对象时没有收紧t上界;重构时改变像素坐标或初始化顺序,导致相同场景输出发生漂移”已经真正修复?
本章回顾
掌握Surface Normals and Multiple Objects × Moving Camera Code Into Its Own Class意味着能将“把交点几何、朝向和多对象最近命中统一成查询合同,并把相机初始化、射线生成、颜色求值与图像写出收拢为稳定接口”写成明确公式或算法,能操作正式坐标,能制造“不根据入射方向翻转法线,或遍历对象时没有收紧t上界;重构时改变像素坐标或初始化顺序,导致相同场景输出发生漂移”,还能凭front_face、单位法线、对象身份和最近命中距离、公开参数、initialize派生量、首末像素射线和重构前后PPM哈希恢复同输入结果,而不是把一段Vulkan生命周期模板换上本章标题。
名词解释
本章出现的专业名词,用大白话再讲一遍。
- 法线
法线在Surface Normals and Multiple Objects × Moving Camera Code Into Its Own Class中用于把交点几何、朝向和多对象最近命中统一成查询合同;应由front_face、单位法线、对象身份和最近命中距离确认,而不是只凭术语出现。
- hit_record
hit_record在Surface Normals and Multiple Objects × Moving Camera Code Into Its Own Class中用于把交点几何、朝向和多对象最近命中统一成查询合同;应由front_face、单位法线、对象身份和最近命中距离确认,而不是只凭术语出现。
- hittable_list
hittable_list在Surface Normals and Multiple Objects × Moving Camera Code Into Its Own Class中用于把交点几何、朝向和多对象最近命中统一成查询合同;应由front_face、单位法线、对象身份和最近命中距离确认,而不是只凭术语出现。
- camera class
camera class在Surface Normals and Multiple Objects × Moving Camera Code Into Its Own Class中用于把相机初始化、射线生成、颜色求值与图像写出收拢为稳定接口;应由公开参数、initialize派生量、首末像素射线和重构前后PPM哈希确认,而不是只凭术语出现。
- initialize
initialize在Surface Normals and Multiple Objects × Moving Camera Code Into Its Own Class中用于把相机初始化、射线生成、颜色求值与图像写出收拢为稳定接口;应由公开参数、initialize派生量、首末像素射线和重构前后PPM哈希确认,而不是只凭术语出现。
- render
render在Surface Normals and Multiple Objects × Moving Camera Code Into Its Own Class中用于把相机初始化、射线生成、颜色求值与图像写出收拢为稳定接口;应由公开参数、initialize派生量、首末像素射线和重构前后PPM哈希确认,而不是只凭术语出现。