顶点数据与缓冲区对象专题测试
- 顶点缓冲对象创建与上传: 使用 createBuffer、bindBuffer、bufferData 把顶点数据上传到 GPU
- attribute 绑定与顶点布局描述: 使用 vertexAttribPointer 与 enableVertexAttribArray 描述顶点数据布局
- 交错与分离顶点布局: 对比交错缓冲与分离缓冲的存储结构及缓存访问效率
- 索引缓冲与顶点复用: 使用 ELEMENT_ARRAY_BUFFER 与 drawElements 复用顶点降低数据量
- 顶点数据动态更新: 使用 bufferSubData 与 DYNAMIC_DRAW 更新每帧变化的顶点数据
- 绑定点与状态机缓存: 理解 WebGL 全局状态机模型与绑定缓存对绘制时机的要求
试卷习题(23 题)
参考答案在文末交错布局把同一顶点的位置、法线、UV 连续存放,通常比分离布局有更好的缓存局部性。
WebGL 是全局状态机,绘制调用本身不携带参数,渲染结果完全依赖当前设置的状态。
逐帧变化的顶点数据应使用 bufferSubData 局部更新,而不是每帧调用 bufferData 重新分配缓冲。
vertexAttribPointer 的 stride(步长)与 offset(偏移)参数单位是字节,而不是元素个数。
顶点数据必须先上传到缓冲区对象,成为 GPU 可访问的显存资源后才能被绘制使用。
使用索引缓冲后,同一个顶点可以被多个三角形共享,从而降低顶点数据的存储量。
按索引顺序绘制顶点应使用哪个接口?
顶点数据按「位置 + 颜色」交错存放时,vertexAttribPointer 的 stride 参数应该填写什么?
关于 WebGL 状态的作用范围,正确的理解是什么?
只修改缓冲中一部分顶点数据,应使用哪个接口?
顶点按「位置 3 个 float + UV 2 个 float」交错存放,读取 UV 属性时 offset 应为多少字节?
用 4 个顶点绘制一个矩形(两个三角形),索引缓冲中需要多少个索引值?
相比分离布局,交错顶点布局的主要优势是什么?
把缓冲标记为 DYNAMIC_DRAW 的含义是什么?
把着色器中的 attribute 变量与已绑定的顶点缓冲数据关联起来,应调用哪个接口?
把 Float32Array 顶点数据上传到当前绑定的 ARRAY_BUFFER,应使用哪个接口?
为避免使用到上一帧残留的状态,渲染代码应按什么顺序组织?
关于 WebGL 状态机与资源绑定,以下说法正确的是?
关于顶点数据的动态更新,以下说法正确的是?
关于顶点缓冲对象的创建与使用,以下说法正确的是?
关于索引缓冲与索引绘制,以下说法正确的是?
关于 attribute 的绑定与布局描述,以下说法正确的是?
关于顶点布局的取舍,以下说法正确的是?
