AI 协作日志
学生 Web 实验作品平台
学号:202412211401021 · 来源:ai-log.md
# 实验一 AI协作记录 ## AI协作1:理解数据流 ### 我的目标 搞清楚从JS的Float32Array到屏幕画出三角形完整WebGL2数据流,理解Buffer、vertexAttribPointer、顶点着色器、光栅化、片元着色器各自作用。 ### 提示词 从 JavaScript 的 Float32Array 到屏幕上出现一个三角形,中间发生了哪些关键步骤?请结合 WebGL2 解释 Buffer、vertexAttribPointer、Vertex Shader、光栅化和 Fragment Shader 各自负责什么,不要直接修改我的代码。 ### AI关键回答摘要 1.JS把顶点数据放入Float32Array(CPU内存); 2.创建Buffer,bufferData把数据上传GPU显存; 3.vertexAttribPointer定义GPU如何从Buffer读出数据; 4.Vertex Shader处理每一个顶点; 5.图元组装后光栅化,把三角形面片转成片元; 6.Fragment Shader计算每个片元颜色,输出到画布像素。 ### 我的判断 每一步都要对应task1.js里面的代码。 ### 验证方法 打开task1.js,依次寻找Buffer创建、bindBuffer、bufferData、vertexAttribPointer、drawArrays代码,对照AI说的流程核对。 ### 验证结果 代码中可以找到全部对应环节;之前分不清Buffer是CPU还是GPU内存,通过代码核验明白了Buffer存储在GPU显存。 ### 修正后的结论 CPU数组只是原始数据,必须通过bufferData拷贝到GPU Buffer,着色器才能访问数据。 ## AI协作2:程序调试 ### 现象 第一个三角形正常显示,右侧四边形图形绘制异常,只出现一部分。 ### 我的初步判断 drawArrays的顶点计数参数写错。 ### 给AI的提示词 WebGL2第一个图形正常,第二个图形显示不正常,列出3个最可能原因和验证方法,不要重写完整代码。 ### AI给出的关键建议 1. drawArrays顶点数量参数错误;2.绑定新Buffer后没有重新调用vertexAttribPointer;3.uniform颜色更新时机错误。验证:查看drawArrays第三个参数、检查bindBuffer之后是否设置顶点属性、看控制台有无报错。 ### 我实际进行的测试 把drawArrays第三个参数改成4。 ### 测试结果 修改为4之后,四边形完整正常绘制。 ### 最终原因 drawArrays第三个参数填写为3,四边形有4个顶点,顶点读取数量不足。 ### 是否采纳AI建议及理由 采纳,AI提示的顶点计数问题与实际bug吻合,通过修改参数验证确认故障点。 ## AI协作3:顶点属性与颜色 ### 我的目标 理解双Buffer,位置属性读2个float,颜色属性读4个float,观察参数错误的现象。 ### 提示词 WebGL2,vPosition每个顶点2个float,vColor每个顶点4个float,从vertexAttribPointer读取Buffer数据角度解释区别。 ### AI关键回答摘要 vertexAttribPointer第二个参数代表**每个顶点读取多少个浮点数**。位置只需要x,y填2;颜色需要R、G、B、A共4个分量填4。填错数字GPU就会错误偏移读取Buffer里的数据,颜色乱掉。 ### 对照实验 把颜色vertexAttribPointer的第二个参数从4改为3。 ### 实际现象 三角形颜色完全错乱,出现奇怪杂色,不再是红‑绿‑蓝渐变。 ### 我的解释 参数改为3后,GPU每个顶点只读取3个颜色浮点数,跳过A分量,读取到下一组颜色数据,数据错位。 ### 最终结论 vertexAttribPointer第二个参数必须匹配该属性每个顶点占用多少个float;颜色vec4必须填4。 ## AI协作4:任务5图元探究 ### 我的目标 固定顶点数据不变,更换绘制图元,观察渲染结果差异。 ### 我修改了什么 顶点坐标、顶点顺序、颜色全部沿用任务2,仅修改drawArrays的mode参数。 ### 我原先预测 使用gl.LINE_LOOP可以画出闭合的四边形边框。 ### 实际结果 画面出现蓝色闭合空心四边形线框,没有填充面。 ### 原因解释 LINE_LOOP把顶点依次连线,并且自动把最后一个顶点连回第一个顶点,形成闭合轮廓;该模式只绘制线条,不会生成填充三角形面片。