AI 协作日志

学生 Web 实验作品平台

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

# 实验五AI协作与核验记录(学生填写)

学号:202412211402020    姓名:靳嘉欣    日期:2026.11.9

> 必须记录**自己的预测、原始问题、AI建议、自主判断与实际核验**。AI代码不能代替本人解释。可附完整对话链接/导出记录,避免只放聊天截图而无测试证据。

## 协作一:观察与投影概念核验(Task B / C,3分)

1. 我的问题和事先预测(M/V/P中谁变化?预期画面如何变化?):一开始分不清M模型矩阵、V观察矩阵、P投影矩阵各自干什么。
   预测 1:移动相机(改变V),物体的世界坐标应该不会发生改变,只是我们看物体的视角变了。
   预测 2:切换正交 / 透视投影(只改变P,M、V保持不变),物体在世界中的大小位置不变;透视会近大远小,正交远近物体看起来大小一样。
   预测 3:修改 Model 矩阵 M 去平移旋转物体,物体世界坐标会真正改变。
2. 我实际输入给AI的提示词:在WebGL2右手坐标系、列向量和P・V・M的顺序下,我想比较移动物体与移动相机、正交与透视投影。
请给我三组能区分原因的控制变量实验,指出应改变M/V/P中的哪项,说明可以打印哪些坐标数值进行核验,不要直接生成整套代码。
3. AI建议摘要(包括关键数学依据):
  1)改变V(相机 eye):M、P固定。物体模型矩阵不变,物体世界坐标不变,仅观察视角改变;读取状态栏 “模型世界中心” 数值可以验证,该数值不会变化。
  2)改变M(模型平移旋转):V、P固定。物体世界坐标会跟随变化,状态栏世界中心数值会改变。
  3)改变P(正交 / 透视切换):M、V完全不动。物体世界坐标不变;只影响光栅之后屏幕上的成像;可以使用 “近远对照立方体” 观察近大远小现象。
  矩阵顺序:p_{clip}=P·V·M·N·p_{local},矩阵从右向左作用顶点。
4. 我的判断和采纳/拒绝理由:我采纳这套控制变量思路。作为初学者,不能光看画面长得像,
   必须看后台打印 /UI状态栏的世界坐标数值,区分“看起来动”和“物体真的在世界空间动”。不直接复制AI代码,自己手动修改参数做对照测试。
5. 我的测试参数、测试操作与结果(附截图/数值):
- 测试1(改V,相机):加载茶壶模型,记录状态栏模型世界中心。点击侧面视角按钮,只修改相机eye。
结果:画面物体视角变了,状态栏模型世界中心数值保持不变,符合预期。
- 测试2(改M,模型):拖动模型平移,状态栏模型世界中心发生变化,物体真实世界位置改变。
- 测试3(改P,投影):保持相机、模型完全不动,在下拉框切换透视 / 正交;打开“显示近 / 远等尺寸立方体”。
结果:透视模式近处立方体更大、远处更小;正交模式两个立方体屏幕尺寸几乎一致。
6. AI是否正确?我最终修正了什么认识?
AI给出的思路是正确的。我之前误区:以为画面上物体移动=物体真实世界坐标发生改变;现在明白,移动相机只是换“眼睛位置”,物体本身在世界空间一动不动。
## 协作二:程序故障诊断(Task C / D,4分)

1. 真实错误现象和我起初怀疑的原因:写Task‑D鼠标拖动的时候,出现问题:鼠标向下拖动,模型却向上旋转,方向是反的。
一开始我怀疑是不是矩阵乘反了,或者lookAt相机参数写错。
2. 向AI提出的诊断问题:我的OBJ能显示,但切换透视投影后形状被拉伸/裁剪或者鼠标拖动方向异常。
请从宽高比、裁剪面、矩阵顺序和观察基向量中提出至少三种假设,分别给一项最小测试,先帮助排查,不要直接重写完整程序。
3. AI建议的至少两个可区分原因及测试:
- 假设①:画布宽高比aspect计算错误,造成透视拉伸;测试:打印aspect数值。
- 假设②:鼠标dy坐标方向问题,浏览器屏幕坐标系Y轴向下,没有做符号取反,旋转方向颠倒;测试:给dy 乘‑1观察现象。
- 假设③:矩阵相乘顺序颠倒,M矩阵计算顺序写反;测试,核对chain矩阵链书写顺序。
4. 我实际逐项测试了什么?各自结果如何?
①打印aspect 数值,宽高比数值正常,排除拉伸问题。
②鼠标dy变量手动乘以‑1,拖动方向立刻正常,定位到根源。
③核对chain矩阵顺序,矩阵链没有写反,排除。
5. 最终根因、修复处及修复后结果:
根因:浏览器屏幕Y轴向下,直接把dy增量给到旋转,旋转方向颠倒。
修复:在 rag函数里面,垂直方向旋转时对dy做符号处理。修复完成,鼠标拖动旋转方向符合直觉,Shift平移、滚轮、键盘功能全部正常。

## 协作三:综合工作台方案比较(Task E,3分)

1. 我准备完成的观察任务:Task‑E自主Challenge加分任务,二选一;目标实现绕任意世界三维点公转,并可视化旋转中心点局部 X/Y/Z 坐标轴。
2. 向AI询问的两种设计方案:我已完成OBJ导入、观察视角、正交/透视以及鼠标键盘变换。
请提供两个能在40分钟内复用已有WebGL2模块的观察台拓展设计,对比功能、矩阵链、交互参数和验证难度。不引入Three.js、光照、纹理或复杂模型编辑器。
方案 A:绕任意世界点公转+可视化局部坐标轴(模型矩阵M修改)
方案 B:轨道环绕相机,拖动鼠标让相机绕物体旋转,物体保持静止(修改V观察矩阵)
3. 两种方案的功能、矩阵链、测试难度对比:
- 方案 A(选做):修改M模型矩阵;变换公式M_{orbit}=T(P)·R_y(\theta)·T(-P)· T(q)· S;可以绘制标记方块、彩色坐标轴;复用orbit滑块;难度中等,重点理解“先移到P,旋转,再移回来” 变换思想。
- 方案 B:修改V相机矩阵;需要自己实现球坐标换算角度;需要新增鼠标逻辑;没有现成orbit滑块,要改造drag交互;改动范围更大,调试难度更高。
4. 最终采纳的方案与理由:
采纳方案 A:绕任意世界点公转+局部坐标轴可视化。
理由:可以很好练习复合平移旋转矩阵变换;可以绘制直观可视化标记(黄色中心点、RGB坐标轴)方便肉眼核验;
复用现有UI orbit滑块,不需要大规模修改ui.js/app.js框架,风险更小,适合初学者。
5. 自己实现或修改的功能差异:我没有直接覆盖修改task‑e.js原有提交版本,为了不破坏必做任务,新建独立的task‑bonus.html、task‑bonus.js作为独立加分页面。
- 黄色立方体标记自定义旋转中心点P;
- 橙色方块做公转运动;
- 在P点绘制红 X、绿 Y、蓝 Z三根固定的局部坐标轴;
- P点坐标可以在代码内修改,切换不同公转中心;
- 必做task‑e.js维持基础版本不变,保证作业提交不受加分代码影响。
6. 预测与实际结果对照,仍存在的局限:
预测:拖动orbit滑块,坐标轴完全固定不动,橙色方块围绕黄色方块转圈。
实际运行现象符合预期。
局限:旋转中心点P目前只能修改代码常量,没有做前端 UI 输入框;
如果想要页面上直接输入Px、Py、Pz,还需要修改ui.js、app.js增加状态变量,本次Challenge没有做这部分。

## 全局诚信声明

- 我提交的代码均已本人运行并核验;无法解释的AI输出未直接作为完成结果。
- 我明确标注了使用AI辅助的功能和本人自主完成的关键判断。