AI 协作日志

学生 Web 实验作品平台

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

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

学号:202412211402026    姓名:祁硕涵   日期:2026.11.9

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

## 协作一:观察与投影概念核验(Task B / C,3分)
1. **我的问题和事先预测**
预测:①只修改M旋转模型,物体世界坐标改变;②只修改V(相机),物体世界坐标不变;③正交投影远近物体尺寸一致,透视近大远小。
2. **输入AI提示词**
> 在WebGL2右手坐标系、列向量和P·V·M的顺序下,我想比较移动物体与移动相机、正交与透视投影。请给我三组能区分原因的控制变量实验,指出应改变M/V/P中的哪项,说明可以打印哪些坐标数值进行核验,不要直接生成整套代码。
3. **AI建议摘要**
- 实验1:控制V变化,M/P固定。打印模型世界坐标(M变换后);预期:世界坐标数值不变,画面变化。
- 实验2:控制M变化,V/P固定;打印模型世界坐标,预期坐标数值改变。
- 实验3:M/V固定,切换P(正交/透视),打印两个深度不同立方体的世界坐标;世界坐标完全不变,仅屏幕像素大小改变。
4. **我的判断和采纳理由**
采纳这三组控制变量思路,不复制代码,自己写矩阵调用。区分画面视觉相似与底层矩阵数值不同。
5. **测试参数与结果**
测试1:正面→侧面视角切换(仅V改变),模型世界中心输出不变,画面旋转。
测试2:拖动鼠标旋转模型(仅M改变),世界中心坐标发生旋转变化。
测试3:打开近远立方体,M/V固定切换正交透视;立方体世界坐标不变;透视近处方块更大,正交两者一样大。截图保存。
6. **修正认识**
画面看起来旋转,不一定是物体在世界空间旋转,也可以是相机旋转;必须打印中间坐标数值,不能只看屏幕画面。

## 协作二:程序故障诊断(Task C / D,4分)
1. **故障现象**:切换透视投影模型被拉伸变形。怀疑:①宽高比aspect错误;②near<=0;③矩阵相乘顺序颠倒;④lookAt up向量与视线共线。
2. **向AI提问**
> 我的OBJ能显示,但切换透视投影后形状被拉伸/裁剪或者鼠标拖动方向异常。请从宽高比、裁剪面、矩阵顺序和观察基向量中提出至少三种假设,分别给一项最小测试,先帮助排查,不要直接重写完整程序。
3. **AI给出假设与最小测试**
假设1:aspect没有取canvas实际w/h;测试:打印aspect数值,对比canvas.width/canvas.height。
假设2:near <=0;测试强制near=0.1观察模型是否恢复。
假设3:矩阵乘法顺序写反(行向量/列向量混淆);测试交换P*V*M*N顺序看画面。
假设4:鼠标Shift平移,相机基向量提取错误,right/up取错列;打印view矩阵的前三列。
4. **逐项测试**
打印aspect,发现我一开始硬编码aspect=1,没有使用scene.resize()返回的真实画布宽高比。near=0.1是正常。矩阵顺序P*V*M*N正确。
5. **根因修复**
根因:projection函数没有接收真实`aspect`参数,硬编码1;改为函数传入参数`aspect`。修复后透视不再拉伸。

## 协作三:综合工作台方案比较(Task E,3分)
1. **准备完成观察任务**:实现参考点P,方块标记绕P旋转;选择两个拓展方案二选一。
2. **提问AI提示词**
> 我已完成OBJ导入、观察视角、正交/透视以及鼠标键盘变换。请提供两个能在40分钟内复用已有WebGL2模块的观察台拓展设计,对比功能、矩阵链、交互参数和验证难度。不引入Three.js、光照、纹理或复杂模型编辑器。
3. **两种方案对比**
- **方案A:可输入旋转中心P坐标,自由绕P旋转标记**
  功能:UI输入Px Py Pz,实时修改参考点,方块绕自定义点旋转;矩阵链:`T(P)*Ry*T(-P)*T(q)*S`;交互参数:orbit角度、P的xyz;验证难度中等,需要输入多组P验证标记位置。
- **方案B:双画布同步对照(Challenge任务),同一M/V,左右分屏分别正交/透视**
  功能:两个canvas,同一套M/V,仅P不同,同步交互;矩阵链两边M/V完全相同,P不同;验证难度高,需要修改页面布局、两套渲染循环。
4. **最终采纳方案:方案A,可输入旋转中心P**
理由:40分钟可完成,复用现有draw.mesh,不用改动页面HTML布局;Challenge双画布改动量大,时间不足。方案由**我自己做最终决定**。
5. **自己实现修改**:在task‑e.js实现`extra()`返回两个标记,支持orbit角度控制绕点旋转;UI已经提供orbit滑块。
6. **预测与实际**
预测:orbit从0到360°橙色方块绕黄色P点画圆。实际运行符合预测;局限:只支持绕Y轴旋转,不支持任意轴。

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