AI 协作日志

学生 Web 实验作品平台

学号:202412211402011 · 来源:ai-log.md

# 实验五AI协作与核验记录(学生填写)
学号:202412211402011  姓名:金陈标  日期:2026-11-12
> 必须记录**自己的预测、原始问题、AI建议、自主判断与实际核验**。AI代码不能代替本人解释。可附完整对话链接/导出记录,避免只放聊天截图而无测试证据。
## 协作一:观察与投影概念核验(Task B / C,3分)
1. 我的问题和事先预测(M/V/P中谁变化?预期画面如何变化?):
   我想搞清楚"移动物体"和"移动相机"到底差在哪。我一开始觉得两者都只是让画面变,应该差不多。但注意到如果是站立的位置换了,模型的世界坐标不该跟着变。
2. 我实际输入给AI的提示词:
   "WebGL2列向量、P·V·M·N 顺序下,我想分别改变 M、V、P 来观察画面。请给出能区分这三种原因的控制变量测试,并说明打印哪些数值核验,不要直接给整套代码。"
3. AI建议摘要(包括关键数学依据):
   - 改 M:动的是模型自身位姿,模型世界中心会跟着变;
   - 改 V:动的是相机,模型世界坐标不变,只是被从不同角度看;
   - 改 P:正交与透视只影响深度压缩方式,M/V 都不动。透视下同一尺寸物体近大远小,正交下相等。
4. 我的判断和采纳/拒绝理由:
   采纳。关键是要打印"模型世界中心"这个数——如果它变了,说明动的是 M 而不是 V,这条最有用。
5. 我的测试参数、测试操作与结果(附截图/数值):
   - 切正面→侧面→顶部→斜上方,世界中心一直是 (0.00, 0.00, 0.00),说明改的是 V。
   - 勾选等尺寸立方体对照:正交下近点/远点 x_ndc 都是 0.1182(一样大);透视下近 0.3485、远 0.1394(近大远小)。
   - 透视 FOV 从 50° 调到 80°,同一点 x_ndc 从 0.3485 降到 0.1937,物体占画面变小。
6. AI是否正确?我最终修正了什么认识?
   正确。我原来的"移动相机和移动物体差不多"是错的。真正的区分点不是画面长得像不像,而是看模型世界坐标有没有变,以及这个变化该由 M 还是 V 来承担。
## 协作二:程序故障诊断(Task C / D,4分)
1. 真实错误现象和我起初怀疑的原因:
   Task D 写完 Shift+拖动后,在正面视角拖动模型能正常左右移动,但把相机切到侧面(eye=(8,0,0))再拖,模型不是沿画面水平方向走,而是往别的方向跑了。我起初怀疑是平移量算小了或者符号写反。
2. 向AI提出的诊断问题:
   "Shift+拖动平移在正面视角正常,切到侧面后方向就错了,模型会往斜向跑。可能是哪几个原因?怎么用最小测试区分?"
3. AI建议的至少两个可区分原因及测试:
   - 假设1:直接用世界坐标的 dx/dy 换算平移,没有用相机基向量 → 测试:把 eye 转到侧面看平移方向是否跟着变;
   - 假设2:right/up 基向量叉积顺序错了 → 测试:在正面视角观察 ty 是否非零;
   - 假设3:像素到世界单位的比例没按透视距离算,只是大小不对而不是方向不对 → 测试:改 FOV 看平移量是否变化。
4. 我实际逐项测试了什么?各自结果如何?
   - 正面拖 30px:tx=0.374、ty=0、tz=0,只有水平分量,说明方向本身在正面是对的,排除"整体算错";
   - 侧面 eye=(8,0,0) 再拖 30px:tx=0、tz=−0.344,横向移动落到世界 −Z 方向。这不是错,而是相机转了 90° 之后"屏幕右"在世界里确实变成了 −Z;
   - 改 FOV 后平移量随之变化,证明比例项也在起作用。
5. 最终根因、修复处及修复结果:
   根因是我最初把屏幕位移直接当成世界 X 位移来用,只有在正面视角碰巧看着对。修复方式是在 ex.drag 里先用 forward × up 求 right、right × forward 求 up2,再把 dx/dy 投影到这两个基向量上,并按当前投影的世界高度把像素换成世界单位(正交用 orthoH,透视用 2·dist·tan(fov/2))。修完侧面拖动方向与画面一致,验证值时 tx=0、tz=−0.344。
## 全局诚信声明
- 我提交的代码均已本人运行并核验;无法解释的AI输出未直接作为完成结果。
- 我明确标注了使用AI辅助的功能和本人自主完成的关键判断。