AI 协作日志
学生 Web 实验作品平台
学号:202412211402008 · 来源:ai-log.md
# 实验三 AI协作记录(请学生在实际完成实验后填写) > 教师参考代码包不包含虚构的AI协作过程。学生提交时需填写真实工具、提示词、独立测试与结论。 ## AI 协作 1:矩阵和变换次序 - 我自己的预测:平移和旋转矩阵交换顺序,最终绘制出来的图形位置应该一样,矩阵相乘顺序不影响结果。 - AI 工具与原始提示词:豆包;WebGL 中,平移矩阵和旋转矩阵相乘,变换顺序不同结果一样吗?用图形学矩阵变换原理解释。 - AI 的建议:矩阵乘法不满足交换律,三维图形变换采用右乘,变换顺序从右向左执行。先平移再旋转,物体绕坐标原点旋转;先旋转再平移,物体旋转之后再偏移位置,两者结果不同。 - 本人计算、运行与证据:Task A 成功加载圆、三角形、正方形、四面体四种几何模型,顶点缓冲区一次性上传 GPU。在 Task B 矩阵测试页面,分别构造`平移*旋转`、`旋转*平移`两组模型矩阵,打印顶点坐标,两组结果不一致;可视化预览能直观看到图形位置差别,验证矩阵顺序带来的变化。 - 采纳或修正结论:采纳。我的初始预测错误,变换顺序会改变物体最终位置,编写模型变换代码时要严格遵循变换顺序。 ## AI 协作 2:实际故障排查 - 错误现象与重现步骤:打开 task-a.html,页面提示启动失败,画布空白,notice 区域报错。复现:直接在浏览器打开 task-a.html。 - 我先检查了什么:检查 HTML 文件里 js 引用路径,确认 task-a.js、app.js 文件名拼写,查看是否漏写闭合标签。 - AI 工具与原始提示词:豆包;WebGL 实验 task-a 页面加载提示启动失败,canvas 画布空白,怎么排查? - AI 建议的候选原因与测试:1. JS 文件引入顺序错误,app.js 必须在 task-a.js 之前加载;2. 着色器代码语法错误;3. canvas id 和代码获取 id 不一致。逐项测试:调换 js 引入顺序,将 app.js 放到 task-a.js 前面。 - 实测结果、修复与复测:修改 script 引入顺序后,刷新页面不再报错,画布正常渲染出四种几何图形,下拉菜单切换预览功能正常,问题修复。 ## AI 协作 3:设计方案比较 - 我考虑的两种实现:方案 1:动画每一帧重新生成全部顶点数据上传 GPU;方案 2:顶点数据一次性上传 GPU,每帧只更新模型矩阵 uniform。 - AI 工具与原始提示词:豆包;WebGL 做物体动画,两种方案:每一帧更新顶点 vs 每一帧更新模型矩阵,对比优缺点。 - 对比、取舍与原因:方案 1:每一帧上传顶点,显存与 CPU-GPU 传输开销巨大,物体参数修改麻烦;方案 2:顶点缓冲区只上传一次,仅修改模型矩阵,传输数据量极小,便于实时调整运动参数。选择方案 2,图形学标准动画实现方式。 - 实际实现及核验:Task C 动画场景采用方案 2。顶点数据初始化时送入 GPU,渲染循环内不断更新模型矩阵传给着色器,四个物体动画流畅,无卡顿,达到预期效果。 ## 思考题解答 思考题 A 答:不需要重新上传局部顶点。圆的局部顶点数据定义了模型本身的几何形状,一次性上传到 GPU 缓冲区后保持不变。改变显示位置只需要在 CPU 侧修改模型矩阵 Model,通过 uniform 传递给顶点着色器,由 GPU 在渲染时对顶点做变换计算,原始顶点数据不需要改动。 思考题 B 答:结果不一样。矩阵变换是右乘,变换顺序从右向左执行。先平移再旋转,会绕原点旋转;先旋转再平移,旋转后再偏移位置。矩阵乘法不满足交换律,因此变换顺序会改变最终顶点位置。 思考题 C 答:动画确实依靠每一帧更新模型矩阵实现。如果预先计算全部帧顶点上传 GPU,会占用巨大显存,灵活性很差;而每一帧仅修改 CPU 端模型矩阵,通过 uniform 传给顶点着色器,GPU 实时做顶点变换,显存开销小,随时可以调整运动参数。 思考题 D 答:顶点缓冲区:几何形状相同的物体可以共用一套顶点缓冲区;形状不同则需要各自的顶点数据。着色器程序:只要渲染逻辑一致,多个物体可以共用同一套着色器,只需要切换不同的 uniform(模型矩阵、颜色)即可绘制。 思考题 E 答:投影矩阵将相机空间下的顶点变换到裁剪空间,完成三维到二维的映射。正交投影没有近大远小效果,物体大小不受距离影响;透视投影模拟人眼,远处物体看起来更小,具备真实的空间透视感。