AI 协作日志

学生 Web 实验作品平台

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

# \# 实验一 AI协作记录

# \## AI协作1:理解数据流

# \### 我的目标

# 理解从JS Float32Array到屏幕三角形完整WebGL2数据流,理清Buffer、vertexAttribPointer、顶点着色器、光栅化、片元着色器各自作用。

# \### 提示词

# 从 JavaScript 的 Float32Array 到屏幕上出现一个三角形,中间发生了哪些关键步骤?请结合 WebGL2 解释 Buffer、vertexAttribPointer、Vertex Shader、光栅化和 Fragment Shader 各自负责什么,不要直接修改我的代码。

# \### AI关键回答摘要

# 1.JS在CPU内存创建Float32Array存放顶点;2.createBuffer创建GPU缓冲区对象;bindBuffer绑定目标;bufferData把CPU数据上传GPU显存;3.getAttribLocation拿到shader属性位置;vertexAttribPointer设置如何从当前绑定Buffer读取数据,每个顶点读取几个分量、类型、步长偏移;enableVertexAttribArray开启属性;4.VertexShader逐个顶点执行;5.图元组装,光栅化把图元转为大量片元,对out输出变量插值;6.FragmentShader逐个片元执行输出像素颜色,写入framebuffer最终显示到canvas。

# \### 我的判断

# 概念大致看懂,但对vertexAttribPointer绑定“当前绑定buffer”这点一开始理解模糊。

# \### 验证方法

# 打开task1.html对照task1.js逐行比对AI描述,找到每一步对应的代码。

# \### 验证结果

# 确认:bindBuffer之后调用vertexAttribPointer,是将当前绑定ARRAY\_BUFFER和vPosition属性关联;不是buffer和属性永久绑定。

# \### 修正后的结论

# vertexAttribPointer不是绑定buffer对象ID,而是使用此刻\*\*正在被bindBuffer绑定\*\*的那个Buffer作为数据源,这点是多Buffer切换时容易踩坑点。

# 

# \## AI协作2:程序调试

# \### 现象

# task3中三角形绘制正常,第二个四边形黑屏不显示。

# \### 我的初步判断

# 可能顶点数量写错,或者忘记enableVertexAttribArray,或者buffer没有bind。

# \### 提示词

# 下面是一段 WebGL2 代码。第一个图形正常,第二个图形没有显示。请不要重写完整程序,只列出最可能的3个原因,并告诉我应该通过什么现象、Console 信息或代码检查逐一验证。

# \### AI建议

# 1.切换新buffer后没有重新调用vertexAttribPointer;2.drawArrays顶点计数参数错误;3.uniform位置获取失败或者没有enableVertexAttribArray;验证方法:console打印属性location看是否‑1;检查drawArrays第三个参数;确认bindBuffer在vertexAttribPointer之前。

# \### 我的测试

# 人为制造错误:注释掉四边形部分的gl.vertexAttribPointer调用,复现黑屏;打印vPositionLoc不为‑1;drawArrays顶点数是4没问题。

# \### 测试结果

# 复现:绑定新Buffer后,没有重新执行vertexAttribPointer,属性仍然读取旧Buffer,数据错乱,四边形无法绘制。

# \### 最终原因

# 更换buffer之后,没有重新调用vertexAttribPointer建立属性读取配置。

# \### 是否采纳及理由:采纳,AI指出的第一条就是本错误根源,验证复现该现象。

# 

# \## AI协作3:顶点属性Buffer读取参数

# \### 我的目标

# 理解位置属性读2个float,颜色属性读4个float,vertexAttribPointer如何读取buffer内连续数据。

# \### 提示词

# 在 WebGL2 中,位置属性 vPosition 每个顶点提供2个 float,而颜色属性 vColor 每个顶点提供4个 float。请从“GPU怎样按 vertexAttribPointer 的参数读取 Buffer 中连续数据”的角度解释两个属性的区别,不要只列参数定义。

# \### AI关键回答摘要

# vertexAttribPointer第二个参数为每顶点分量计数。GPU遍历顶点:每读取N个float作为该顶点属性值;位置每个顶点2个float(x,y);颜色每个顶点4个float(RGBA)。两个buffer独立,各自bind之后设置自己的分量数量。若分量数目与数据实际不符,会错位读取后面内存,颜色错乱。

# \### 对照实验

# task4把颜色vertexAttribPointer第二个参数从4改为3运行。

# \### 实际现象

# 三角形颜色完全错乱,顶点颜色读取错位,A分量读取相邻内存数据,渐变颜色完全不对。恢复4之后渐变正常。

# \### 我的解释

# 参数3告诉GPU每个顶点只取3个float,RGBA中A分量会读取下一个顶点R值,内存读取错位,颜色出错。

# \### 最终结论

# vertexAttribPointer第二个参数定义每个顶点从buffer读出多少个浮点数作为该属性输入,必须和数据存储格式严格匹配,否则内存读取错位渲染异常。