AI 协作日志

学生 Web 实验作品平台

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

# 实验三 AI协作记录
> 教师参考代码包不包含虚构的AI协作过程。学生提交时需填写真实工具、提示词、独立测试与结论。

## AI协作1:矩阵和变换次序
- 我自己的预测:
  平移+旋转复合变换,先平移再旋转(R×T)和先旋转再平移(T×R)画面看起来差别不大,只是角度;矩阵乘法顺序只影响角度,方块中心点位置不会改变。glMatrix矩阵直接按书写顺序从左往右执行。
- AI工具与原始提示词:
  工具:豆包
  提示词:glMatrix是列向量,4阶变换矩阵T平移R旋转,R*T和T*R的区别是什么?为什么B页面切换世界原点R×T和对象中心T×R,静态截图看着差不多,动态运动完全不一样?
- AI的建议:
  glMatrix采用**列向量**,矩阵变换遵循**右侧优先执行**。
  1. $M=R\cdot T$(R×T,世界原点旋转):先执行T平移,再执行R旋转;方块中心点会跟着旋转,绕画布原点公转。
  2. $M=T\cdot R$(T×R,对象中心旋转):先执行R旋转,再执行T平移;方块中心固定,原地自转。
  静态固定角度时画面外观近似,但矩阵最后一列平移分量不同;动态连续改变角度,运动轨迹差异巨大。
- 本人计算、运行与证据:
  在Task B页面固定初始中心X=0.5,Y=0.25,角度45°:
  - T×R矩阵最后一列为`[0.5,0.25,0,1]`,平移分量不受旋转角度影响;
  - R×T矩阵最后一列数值随角度改变;
  修改角度连续变化测试:R×T方块沿圆弧公转,T×R方块固定中心点自转,和理论一致。截图留存两组对比画面。
- 采纳或修正结论:
  采纳AI原理讲解;修正我之前预判的错误:矩阵顺序**不只是改变角度,会改变物体运动轨迹**,列向量下变换从右向左执行。TaskB页面代码按照R×T、T×R两套组合实现,测试验证通过。

## AI协作2:实际故障排查
- 错误现象与重现步骤:
  Task C动画运行时,四面体旋转方向异常;预期是绕Y轴原地自转,但运行后四面体一边旋转一边缓慢漂移,中心点会慢慢偏移。
  重现:打开TaskC,启动动画,观察右下角四面体,几秒后位置偏移。
- 我先检查了什么:
  1. 检查模型矩阵构造代码,怀疑平移矩阵写在了旋转右侧;
  2. 检查动画时间增量,怀疑dt累积误差;
  3. 核对glMatrix函数`mat4.rotateY`、`mat4.translate`参数。
- AI工具与原始提示词:
  工具:豆包
  提示词:WebGL glMatrix,要实现物体先平移到指定位置,然后绕自身Y轴原地自转,矩阵顺序怎么写?如果写反T*R写成R*T会出现什么现象?
- AI建议的候选原因与测试:
  候选原因:矩阵顺序写反,写成$R\cdot T$而不是$T\cdot R$;先平移再绕世界原点旋转,每帧旋转会带动平移坐标发生偏移,产生漂移。
  测试方案:调换矩阵相乘顺序,构造$M = T \cdot R$,先旋转再平移。
- 实测结果、修复与复测:
  修改矩阵相乘顺序,将`mat4.multiply(model, R, T)`改为`mat4.multiply(model, T, R)`。
  复测:四面体中心点固定,只绕自身Y轴自转,不再漂移,动画符合TaskC检查要点。Bug修复完成。

## AI协作3:设计方案比较
- 我考虑的两种实现:
  方案A:每个物体每帧重新生成顶点数组,修改顶点坐标实现动画。
  方案B:顶点Buffer只初始化一次,所有动画仅修改4×4模型矩阵,顶点原始数据固定不变。
- AI工具与原始提示词:
  工具:豆包
  提示词:WebGL做2D/3D简单物体动画,两种方案:1.每帧修改顶点;2.顶点一次性上传GPU,用model矩阵变换。对比性能、代码复杂度、实验要求,选哪个?
- 对比、取舍与原因:
  方案A:每帧更新顶点。缺点:频繁CPU→GPU传输,性能差;违背实验要求“原始局部顶点不在每帧修改”;代码量大,物体一多卡顿。优点:直观,不需要理解矩阵。
  方案B:复用VertexBuffer,仅更新模型矩阵。优点:顶点仅上传一次,GPU高效;符合实验三核心要求,复用同一Buffer绘制多个物体;方便多个独立对象维护各自矩阵。缺点:需要掌握4阶齐次变换矩阵。
  取舍:选择方案B,满足实验检查要点,同时性能更好。
- 实际实现及核验:
  A/B/C/D全部任务共用一套几何Buffer,圆、正方形、三角形、四面体几何数据仅在页面加载时上传一次。每帧只更新各个对象model矩阵,传给着色器。
  核验:TaskC、TaskD多物体并发动画流畅;新增物体不会重新创建几何Buffer;暂停动画不重建WebGL上下文,满足验收要求。

## AI 协作 4:Challenge C2 复合变换实验台开发

- 我自己的预测:
直接复用之前 TaskB 的变换代码,写一个切换开关就可以完成 C2;只要传入一样的 S、R、T 参数,两种变换顺序只是图形旋转角度不同,中心点坐标不会变;齐次点验算只需要直接拿矩阵乘一下坐标,很简单。
- AI 工具与原始提示词:
工具:豆包
提示词:WebGL 做 Challenge C2 复合变换实验台,独立 HTML+JS 文件,支持切换 T・R・S 和 R・T・S 两种矩阵顺序,参数面板控制缩放、旋转、平移,还要有齐次点输入,计算变换后的坐标用来验证矩阵结果。
- AI 的建议:
  1. 区分列向量乘法规则:\(M_1=T\cdot R\cdot S\)(执行顺序 S→R→T:先缩放、原地旋转,再平移出去);\(M_2=R\cdot T\cdot S\)(执行顺序 S→T→R:先缩放、平移,再绕世界原点旋转),二者中心点、轨迹完全不一样,不是只改角度。
  2. 界面拆分:画布区、参数输入区、下拉切换变换次序、齐次点验算模块;每次切换顺序或者修改参数,都要重新计算 model 矩阵、重绘画布、同步输出变换点结果。
  3. 单独写矩阵点乘函数,保证页面内验算的计算逻辑和 WebGL 传给着色器的 model 矩阵完全一致,保证验算证据可信。
  4. 独立文件结构:分开 html 和 js,和原有 A/B/C/D 任务页面风格统一,方便老师单独打开验收。
- 本人计算、运行与证据:
固定参数:S=1,旋转 60°,Tx=0.4,Ty=0.2
  - 顺序 R・T・S:方块绕画布原点公转;修改旋转角度,方块位置跟着圆弧跑动
  - 顺序 T・R・S:方块在 (0.4,0.2) 位置原地自转,中心点固定不变
  输入测试点 (1,0,0,1),分别计算两套矩阵输出变换后坐标,两组数值不一样,截图留存对比画面和验算结果。
- 采纳或修正结论:
采纳方案;修正预判错误:相同参数下变换顺序改变会直接改变物体旋转中心和位置,不仅仅是角度。完成独立 C2 页面,可切换次序、实时预览、点坐标验算,满足加分挑战要求,不是简单复制已有 Demo。