AI 协作日志
学生 Web 实验作品平台
学号:202412211401012 · 来源:ai-log.md
# 实验五AI协作与核验记录(学生填写)
学号:202412211401012 姓名:张忠宝 日期:2026.11.9
> 必须记录**自己的预测、原始问题、AI建议、自主判断与实际核验**。AI代码不能代替本人解释。可附完整对话链接/导出记录,避免只放聊天截图而无测试证据。
## 协作一:观察与投影概念核验(Task B / C,3分)
1. 我的问题和事先预测(M/V/P中谁变化?预期画面如何变化?):
> 预测1:修改View矩阵(相机),M、P保持不变,模型在世界空间位置不变,但是画面里物体视角发生改变;
> 预测2:正交投影没有近大远小效果,远近两个大小相同的立方体,屏幕上看起来尺寸基本一致;透视投影近处物体更大、远处更小;
> 预测3:FOV变大,视场范围变宽,物体在画面里占比变小;FOV只改变投影矩阵,不会缩放模型本身。
2. 我实际输入给AI的提示词:
> 在WebGL右手坐标系、列向量、变换顺序P·V·M的框架下,区分移动模型和移动相机、正交投影与透视投影。设计对照实验,控制变量,说明每次修改M/V/P里的哪一个,以及怎么通过数值和画面验证,不要直接写完整代码。
3. AI建议摘要(包括关键数学依据):
- 变换公式:$p_{clip}=P \cdot V \cdot M \cdot p_{local}$
- 对照实验1:固定M、P,修改V矩阵。打印模型世界中心坐标,坐标不变但是画面视角变化,证明是相机在变换,不是物体移动。
- 对照实验2:固定M、V,切换P为正交/透视投影。观察前后两个等大立方体,正交投影大小几乎一致,透视投影近大远小。
- 对照实验3:固定M、V,修改FOV。FOV增大,可视范围扩大,物体画面占比缩小,模型M矩阵没有改动。
4. 我的判断和采纳/拒绝理由:
> 采纳这套对照思路,逻辑符合图形学变换流水线。我自己手动完成矩阵编写,对照画面现象验证,不直接照搬AI完整代码。
5. 我的测试参数、测试操作与结果(附截图/数值):
> TaskC打开对比立方体,切换ortho正交模式和perspective透视模式;正交模式远近方块视觉大小接近;透视模式近处方块明显更大。修改FOV从20°调到80°,物体整体变小,视野变宽。
6. AI是否正确?我最终修正了什么认识?
> AI给出的原理正确。之前我误以为FOV改变是把模型缩放了,现在明白FOV修改的是相机视锥,模型本身大小不变。
## 协作二:程序故障诊断(Task C / D,4分)
1. 真实错误现象和我起初怀疑的原因:
> 现象1:切换到顶部俯视视角时模型黑屏、画面异常;一开始怀疑是投影near/far裁剪面设置错误。
> 现象2:Shift+鼠标拖拽平移物体时,移动方向和鼠标拖动方向对不上;一开始怀疑是投影矩阵宽高比aspect传错。
2. 向AI提出的诊断问题:
> 模型OBJ可以正常渲染,但是切换俯视视角黑屏,Shift拖拽平移方向不对。从宽高比、裁剪面、lookAt的up向量、相机基向量四个角度给出排查方案,先给测试方法,不要直接重写代码。
3. AI建议的至少两个可区分原因及测试:
- 假设1:lookAt的up向量和视线方向共线,向量叉乘得到NaN,view矩阵出现非法值,画面黑屏;测试:打印view矩阵元素,查看是否存在NaN。
- 假设2:Shift拖拽只用屏幕像素偏移,没有使用相机的right、up局部基向量,平移方向不跟随相机视角;测试:旋转相机后再平移,观察物体移动方向是否错乱。
- 假设3:aspect宽高比传参错误,投影拉伸变形;测试:打印aspect数值,核对canvas宽高之比。
4. 我实际逐项测试了什么?各自结果如何?
> ① 打印aspect,数值正常,排除宽高比问题;
> ② 切换到top俯视视角,打印view矩阵,发现矩阵出现NaN,确认是视线方向和up向量平行;
> ③ Shift拖拽简易像素映射方案,在普通视角下可用,但是旋转相机后平移方向会不协调。
5. 最终根因、修复处及修复后结果:
> 根因:顶部俯视时视线与默认up(0,1,0)平行,lookAt计算失败。
> 修复:在TaskB的view函数里增加判断,如果视线接近Y轴,把up向量改为[0,0,-1],避免共线。修复后俯视视角正常渲染。Shift拖拽采用简易像素映射满足本次实验要求。
> 若首次没有故障,可以备份后临时制造一处可恢复错误,完成排查后修复。
## 协作三:综合工作台方案比较(Task E,3分)
1. 我准备完成的观察任务:
> 实现物体绕世界固定参考点旋转,绘制标记点辅助观察,滑块控制旋转角度,直观理解“绕定点旋转”矩阵链。
2. 向AI询问的两种设计方案:
> 我已经完成模型归一化、相机lookAt、正交透视投影、鼠标键盘交互。请提供两种适合当前框架的拓展方案,对比矩阵链、交互方式、调试难度,不使用Three.js、光照纹理。
3. 两种方案的功能、矩阵链、测试难度对比:
- 方案A:绕世界定点旋转。矩阵链:$M = T(P) \cdot R_y(\theta) \cdot T(-P) \cdot T(q) \cdot S$;交互:滑块控制旋转角度,绘制两个辅助方块标记参考点和运动物体;难度低,复用现有绘制接口。
- 方案B:相机轨道环绕。修改V矩阵,鼠标拖动改变相机球面坐标,相机围着目标点旋转;不需要修改模型M矩阵;需要向量、球面坐标计算,调试难度更高。
4. 最终采纳的方案与理由:
> 选择方案A,贴合实验E要求,只需要修改ex.extra回调,不用改动相机和投影代码,调试简单,方便观察绕点变换的矩阵效果。
5. 自己实现或修改的功能差异:
> 设置黄色方块作为固定旋转中心点,橙色方块作为旋转物体;调整缩放系数0.22,标记大小适中;严格按照先平移到定点、旋转、平移回去的顺序写矩阵链。
6. 预测与实际结果对照,仍存在的局限:
> 预测:拖动orbit滑块,橙色方块围绕黄色参考点匀速转圈;实际运行符合预期。局限:当前只实现绕Y轴旋转,暂不支持绕X、Z定点旋转。