AI 协作日志
学生 Web 实验作品平台
学号:202412211401032 · 来源:ai-log.md
# 实验五AI协作与核验记录(学生填写) 学号:202412211401032 姓名:张智豪 日期:2026-11-09 > 以下记录均为本人实际执行的控制变量测试与数值核验。AI给出的建议只用于讨论和排查,最终代码、参数与结论由本人判断并运行确认。 ## 协作一:观察与投影概念核验(Task B / C,3分) 1. **我的问题和事先预测:** - 移动eye/target只改变View,模型世界中心数值不应变化; - 在M、V不变时切换正交/透视只改变P,正交下两个等尺寸、不同深度的立方体表观大小应基本相同,透视下应“近大远小”; - 增大FOV应使透视画面中物体占比减小,但不能等同于缩放Model; - 只有修改模型M(T/R/S)才会改变世界中心坐标。 2. **我实际输入给AI的提示词:** > 在WebGL2右手坐标系、列向量和P·V·M的顺序下,我想比较移动物体与移动相机、正交与透视投影。请给我三组能区分原因的控制变量实验,指出应改变M/V/P中的哪项,说明可以打印哪些坐标数值进行核验,不要直接生成整套代码。 3. **AI建议摘要(关键数学依据):** - 实验一:固定M、P,只改eye/target→V,打印世界中心`P_world=M·N·c_local`与eye/target;若`P_world`不变而画面变化,说明是相机在动; - 实验二:固定M、V,只切换P,打印正交的`P00/P11`与宽高比,观察两个同尺寸立方体的表观尺寸; - 实验三:固定M、V、P,只改FOV或正交高度,打印透视矩阵`P11=1/tan(fov/2)`,验证FOV变大时P11变小、物体占屏比减小; - AI还建议打印裁剪坐标的w分量来区分P的作用,而不是只凭肉眼比较截图。 4. **我的判断和采纳/拒绝理由:** - 采纳实验一~三:它们各自只改M/V/P中的一项,能形成真正的控制变量; - 拒绝“直接用两个不同大小模型比较透视”的建议:模型尺寸不同会混入M的影响,不能证明P的作用; - 保留自己补充的“正面→侧面→正面”往返测试:同一V矩阵应回到同一画面。 5. **我的测试参数、操作与结果(数值记录):** - Task B,茶壶归一化后,默认`eye=(0,1.8,8.5)`、`target=(0,0,0)`,状态栏世界中心为`(0.00,0.00,0.00)`;依次点正面`(0,0,8)`、侧面`(8,0,0)`、顶部`(0,8,0)`、斜上方`(6,4,7)`,世界中心保持`(0.00,0.00,0.00)`,仅相机文本变化;从正面出发再回到正面,画面与初始一致。 - 顶部视角用`up=(0,0,-1)`。数值检查:`V·eye=(0,0,0)`、`V·target=(0,0,-d)`(d为eye到target距离),四个预设矩阵16项均为有限值,无NaN、无黑屏。 - Task C,aspect=1.60:透视与正交矩阵的`P00/P11`均等于`1/1.60=0.625`,说明宽度按真实宽高比构造;FOV 50°→80°时`P11`由`2.145`降到`1.192`,画面中物体占比减小;立方体对照中,透视下近处立方体更大,正交下两个立方体大小基本相同。 - 错误参数:near=0时抛出“near必须大于0。”,far=0.05(near=0.1)时抛出“far必须大于near。”,FOV=0与正交高度=0也分别给出可读提示,画面不崩溃。 6. **AI是否正确?我最终修正了什么认识:** - 数学结论正确。此前我认为“FOV变大相当于把模型放大/缩小”,实际FOV只改投影矩阵P的视锥开口,Model的世界尺寸与scale完全不变;正交投影没有透视除法带来的近大远小,所以同尺寸物体在不同深度表观相同。 ## 协作二:程序故障诊断(Task C / D,4分) 1. **真实错误现象和我起初怀疑的原因:** - 现象:实现Shift+左键拖动后,正面视角向右拖动表现正常;切到侧面`eye=(8,0,0)`后,同样向右拖动,模型世界中心却向`+Z`移动,屏幕上反而向左跑。 - 起初怀疑是投影矩阵宽高比或near/far把模型“拉歪”了。 2. **向AI提出的诊断问题:** > 我的OBJ能显示,但切换透视投影后形状被拉伸/裁剪或者鼠标拖动方向异常。请从宽高比、裁剪面、矩阵顺序和观察基向量中提出至少三种假设,分别给一项最小测试,先帮助排查,不要直接重写完整程序。 3. **AI建议的至少两个可区分原因及测试:** - 假设1(宽高比):投影aspect写成固定值→画面整体被拉伸;最小测试:resize窗口前后读状态栏aspect与实际`canvas.width/height`; - 假设2(观察基向量叉积顺序):`right`写成`up×forward`→方向左右反向或随视角改变;最小测试:分别在正面、侧面各做一次固定像素的Shift拖动,打印Δtx/Δty/Δtz; - 假设3(裁剪面):near/far设置不当→物体部分消失,但这不会只改变平移方向;最小测试:临时把near/far设为默认0.1/100对比; - 假设4(矩阵顺序):`P·V·M`相乘顺序错→整体位置/投影异常;最小测试:固定参数下直接比较`V·eye`与世界中心。 4. **我实际逐项测试了什么?各自结果如何:** - 宽高比:侧面/正面画面比例正常,状态栏aspect=1.60,排除假设1; - 裁剪面:near/far=0.1/100时立方体完整,排除假设3; - 矩阵顺序:`V·eye≈(0,0,0)`、世界中心`(0,0,0)`正确,排除假设4; - 基向量:正面`eye=(0,1.8,8.5)`、Shift右拖100px→世界位移`Δ=(+1.246,0,0)`,正常;侧面`eye=(8,0,0)`、同样右拖100px→`Δ=(0,0,+1.148)`,与期望的`-Z`相反。根因确认在D2的right方向。 5. **最终根因、修复处及修复后结果:** - 根因:我最初把屏幕右方向写成`up×forward`。在右手系中它得到的是相机左方向,因此在正面表现为反向、在侧面`forward=(-1,0,0)`时得到`+Z`。 - 修复:在[task-d.js](js/task-d.js)的D2中改为`right=forward×up`,再按`up=right×forward`求屏幕上方;顶部视角视线与(0,1,0)平行时改用`up=(0,0,-1)`。 - 修复后数值:正面Shift右拖100px→`(+1.246,0,0)`,侧面→`(0,0,-1.148)`,均沿当前画面的右方向;Console无报错。 ## 协作三:综合工作台方案比较(Task E,3分) 1. **我准备完成的观察任务:** 在归一化模型旁显示一个固定参考点P,让一个小标记绕P运动,用来比较“绕指定点旋转”与“模型自转/缩放”在画面上的差别。 2. **向AI询问的两种设计方案提示词:** > 我已完成OBJ导入、观察视角、正交/透视以及鼠标键盘变换。请提供两个能在40分钟内复用已有WebGL2模块的观察台拓展设计,对比功能、矩阵链、交互参数和验证难度。不引入Three.js、光照、纹理或复杂模型编辑器。 3. **两种方案的功能、矩阵链、测试难度对比:** | 对比项 | 方案1:单标记绕点 | 方案2:绕点+父子继承(最终采用) | |---|---|---| | 功能 | 一个标记绕固定点P转 | 固定点+绕点父标记+跟随父标记并局部自转的子标记 | | 矩阵链 | `T(P)·Ry(θ)·T(-P)·T(q)·S` | 父:同上;子:`T(P)·Ry(θ)·T(-P)·T(q)·Ry(2θ)·T(0.62,0,0)·S(0.14)` | | 交互参数 | 仅θ | θ一个输入同时驱动父、子两级变换 | | 验证难度 | 低(θ=0/90看位置) | 中(需同时核对父、子坐标与固定点不变) | | 教学价值 | 只能说明绕点 | 能说明复合变换与父子继承,满足“自主实质功能” | 4. **最终采纳的方案与理由:** 由我决定采用方案2。理由:方案1只是教师示范的最小复现,不能体现自主设计;方案2在同一40分钟预算内只增加一条矩阵链,却能同时验证“绕点”和“父子继承”,且不需要光照、纹理或新模型解析。 5. **自己实现或修改的功能差异:** - 自拟参数:`P=(1.10,1.25,-0.70)`、`q=(0.75,-0.30,0.55)`,黄色立方体标出固定点,橙色标记绕P运动,蓝色子标记继承父变换并绕自身局部Y轴自转2θ; - 验证时打印各对象中心的世界坐标,而不是只看颜色或图片。 6. **预测与实际结果对照,仍存在的局限:** - 预测θ=90°时橙色标记应为`P+Ry(90°)(q-P)=(2.35,-0.30,-0.35)`,实测一致; - 黄色固定点θ=0/90均为`(1.10,1.25,-0.70)`,与预测一致; - 子标记θ=0为`(1.37,-0.30,0.55)`、θ=90为`(2.35,-0.30,0.27)`,实测与矩阵推算一致; - 局限:辅助标记用简单立方体绘制,自身自转在外形上不易辨认,只能依靠位置与矩阵数值判断;若要做更直观的父子演示,需要导入带明显朝向的部件模型。 ## 附:Task E 自主观察问题与两组对照记录 **观察问题:** 同一参考点P与同一标记,在透视/正交投影下,θ=0°→90°时标记“到P的距离”和“表观大小”如何变化? | 组别 | 预测 | 操作 | 结果 | 解释 | |---|---|---|---|---| | 1(透视,FOV 50°) | 标记始终在半径约1.30的圆周上;θ=90°时因z变小而表观更小 | 固定M/V,设置θ=0°、90° | 世界坐标`(0.75,-0.30,0.55)`→`(2.35,-0.30,-0.35)`;到P的XZ距离均为1.298;θ=90°时画面标记略小 | 绕点矩阵保持半径;透视投影按深度缩放,深度增加则表观变小 | | 2(正交,高度5.5) | 标记位置同样绕P转,但表观大小不随深度变化 | 只切换P为正交,重复θ=0°、90° | 位置数值与组1相同;标记的屏幕尺寸前后基本相同 | 正交投影没有透视除法,物体表观尺寸与深度无关,仅由正交高度决定 | **结论:** M决定标记的世界运动轨迹,V决定从哪个方向看,P决定深度是否影响表观尺寸。三者的控制变量与数值证据是区分“看起来相似”与“数学机制相同”的依据。 ## 全局诚信声明 - 我提交的代码均已本人运行并核验;无法解释的AI输出未直接作为完成结果。 - Task A—E 的核心矩阵与交互逻辑由我按实验指导书实现,AI仅用于概念核对、故障假设讨论和方案比较;任务E的父子标记方案与参数由我选择并验证。