AI 协作日志

学生 Web 实验作品平台

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

# 实验一 AI协作记录
> 请记录本人真实的AI协作过程。不要只粘贴AI生成结果,应体现自己的判断、测试和核验。
## AI协作1:理解数据流
### 我的目标
理解从 JavaScript 的 Float32Array 顶点数据,到屏幕绘制三角形的完整WebGL2图形数据流,在task1代码中定位每一步对应的代码。
### 提示词
从 JavaScript 的 Float32Array 到屏幕上出现一个三角形,中间发生了哪些关键步骤?请结合 WebGL2 解释 Buffer、vertexAttribPointer、Vertex Shader、光栅化和 Fragment Shader 各自负责什么,不要直接修改我的代码。
### AI关键回答摘要
1. 在CPU侧,JS把顶点坐标存入Float32Array;
2. 创建Buffer缓冲区,调用bufferData将顶点数据上传到GPU显存;
3. vertexAttribPointer设置GPU读取缓冲区数据的规则,并绑定到顶点着色器输入变量vPosition;
4. Vertex Shader对每一个顶点执行,输出裁剪空间坐标gl_Position;
5. 图元组装:按照指定图元类型,把顶点组装成三角形;
6. 光栅化:把三角形几何图形转换成大量片元(待渲染像素);
7. Fragment Shader逐个片元执行,输出像素颜色,最终渲染到Canvas画布。
### 我的判断
Buffer是CPU向GPU传递顶点数据的载体;vertexAttribPointer是告诉GPU如何解析缓冲区里连续存放的浮点数。
### 验证方法
打开task1.html,对照task1.js代码,依次找到创建Buffer、bindBuffer、bufferData、getAttribLocation、vertexAttribPointer、enableVertexAttribArray、drawArrays的代码位置,一一对应AI讲解的流程。
### 验证结果
代码环节和讲解完全对应,验证成功。
### 修正后的结论
顶点数据保存在CPU内存,必须通过Buffer上传到GPU显存;vertexAttribPointer定义GPU读取数据的格式;光栅化是把几何图形转化成像素片元的核心阶段。
---
## AI协作2:程序调试
### 现象
task3绘制两个图形时,第一个三角形可以正常显示,第二个四边形无法绘制出来。
### 我的初步判断
切换绑定新Buffer之后,没有重新调用vertexAttribPointer设置顶点属性,WebGL状态机仍然指向旧缓冲区。
### 给AI的提示词
下面是一段 WebGL2 代码。第一个图形正常,第二个图形没有显示。请不要重写完整程序,只列出最可能的3个原因,并告诉我应该通过什么现象、Console 信息或代码检查逐一验证。
### AI给出的关键建议
1. 切换Buffer之后,忘记重新调用vertexAttribPointer与enableVertexAttribArray,顶点属性依旧指向旧Buffer;
2. drawArrays的顶点数量参数写错,读取顶点数量为0;
3. uniform颜色设置错误,图形颜色和画布背景颜色一致,肉眼看不见。
### 我实际进行的测试
在绘制四边形前,重新bindBuffer,设置vertexAttribPointer并启用顶点属性;核对drawArrays顶点数量;修改uColor为明显区别于背景的颜色。
### 测试结果
修改代码后,三角形、四边形都成功绘制在同一个画布,两个图形颜色不相同,互不重叠。
### 最终原因
WebGL是状态机,更换绑定的Buffer之后,顶点属性读取规则不会自动更新,必须重新配置vertexAttribPointer。
### 是否采纳AI建议及理由
采纳,AI给出的3条排查方向可以快速定位WebGL多对象绘制常见的状态问题。
---
## AI协作3:顶点属性与颜色
### 我的目标
理解位置Buffer每个顶点读取2个float,颜色Buffer每个顶点读取4个float,理解vertexAttribPointer第二个参数的作用。
### 提示词
在 WebGL2 中,位置属性 vPosition 每个顶点提供2个 float,而颜色属性 vColor 每个顶点提供4个 float。请从“GPU怎样按 vertexAttribPointer 的参数读取 Buffer 中连续数据”的角度解释两个属性的区别,不要只列参数定义。
### AI关键回答摘要
vertexAttribPointer的第二个参数,代表**单个顶点需要读取多少个连续浮点数**。
位置属性只需要x、y二维坐标,所以参数为2;颜色属性需要R、G、B、A四个通道,参数为4。GPU会按照这个数量,在缓冲区连续内存里依次取出数据送入对应的shader输入变量。
### 对照实验
将颜色Buffer的vertexAttribPointer第二个参数由4临时改为3,运行程序观察效果,之后恢复为4。
### 实际现象
参数改为3时,三角形颜色错乱,出现杂乱异常色彩;恢复为4之后,红、绿、蓝顶点的平滑渐变三角形正常显示。
### 我的解释
参数改为3,GPU读取每个顶点只拿R、G、B,跳过Alpha通道,缓冲区数据读取错位,颜色解析错误。
### 最终结论
vertexAttribPointer第二个参数定义每个顶点读取浮点数个数,参数必须和顶点数据结构严格匹配,否则GPU读取数据错位,渲染结果异常。