首页/ 学科题库/ webgl/ 顶点数据与缓冲区对象专题测试
webgl 模拟试卷

顶点数据与缓冲区对象专题测试

23 题 50 分钟 难度:★
  • 顶点缓冲对象创建与上传: 使用 createBuffer、bindBuffer、bufferData 把顶点数据上传到 GPU
  • attribute 绑定与顶点布局描述: 使用 vertexAttribPointer 与 enableVertexAttribArray 描述顶点数据布局
  • 交错与分离顶点布局: 对比交错缓冲与分离缓冲的存储结构及缓存访问效率
  • 索引缓冲与顶点复用: 使用 ELEMENT_ARRAY_BUFFER 与 drawElements 复用顶点降低数据量
  • 顶点数据动态更新: 使用 bufferSubData 与 DYNAMIC_DRAW 更新每帧变化的顶点数据
  • 绑定点与状态机缓存: 理解 WebGL 全局状态机模型与绑定缓存对绘制时机的要求

试卷习题(23 题)

参考答案在文末
判断题
1
判断题

交错布局把同一顶点的位置、法线、UV 连续存放,通常比分离布局有更好的缓存局部性。

A

对

B

错

2
判断题

WebGL 是全局状态机,绘制调用本身不携带参数,渲染结果完全依赖当前设置的状态。

A

对

B

错

3
判断题

逐帧变化的顶点数据应使用 bufferSubData 局部更新,而不是每帧调用 bufferData 重新分配缓冲。

A

对

B

错

4
判断题

vertexAttribPointer 的 stride(步长)与 offset(偏移)参数单位是字节,而不是元素个数。

A

对

B

错

5
判断题

顶点数据必须先上传到缓冲区对象,成为 GPU 可访问的显存资源后才能被绘制使用。

A

对

B

错

6
判断题

使用索引缓冲后,同一个顶点可以被多个三角形共享,从而降低顶点数据的存储量。

A

对

B

错

单选题
7
单选题

按索引顺序绘制顶点应使用哪个接口?

A

gl.drawArrays

B

gl.drawElements

C

gl.bufferSubData

D

gl.vertexAttribPointer

8
单选题

顶点数据按「位置 + 颜色」交错存放时,vertexAttribPointer 的 stride 参数应该填写什么?

A

单个顶点占用的字节数

B

属性的个数

C

顶点总数

D

固定填 0

9
单选题

关于 WebGL 状态的作用范围,正确的理解是什么?

A

状态只在单次绘制调用内有效,绘制后立即失效

B

状态在设置后持续生效,直到被修改

C

状态在每帧结束后自动重置为默认值

D

状态只对当前绑定的缓冲对象生效

10
单选题

只修改缓冲中一部分顶点数据,应使用哪个接口?

A

gl.bufferData

B

gl.bufferSubData

C

gl.texSubImage2D

D

gl.drawArrays

11
单选题

顶点按「位置 3 个 float + UV 2 个 float」交错存放,读取 UV 属性时 offset 应为多少字节?

A

2

B

3

C

12

D

20

12
单选题

用 4 个顶点绘制一个矩形(两个三角形),索引缓冲中需要多少个索引值?

A

4

B

6

C

8

D

12

13
单选题

相比分离布局,交错顶点布局的主要优势是什么?

A

更容易单独更新某一类属性

B

同一顶点的属性连续存放,顶点读取时缓存局部性更好

C

可以完全避免使用索引缓冲

D

顶点数量会自动减少

14
单选题

把缓冲标记为 DYNAMIC_DRAW 的含义是什么?

A

该缓冲只读,不允许再次写入

B

提示驱动该缓冲会被高频写入,按可重复写入的方式分配存储

C

缓冲数据会被自动压缩存储

D

该缓冲将被用作索引缓冲

15
单选题

把着色器中的 attribute 变量与已绑定的顶点缓冲数据关联起来,应调用哪个接口?

A

gl.vertexAttribPointer

B

gl.bufferData

C

gl.drawArrays

D

gl.getUniformLocation

16
单选题

把 Float32Array 顶点数据上传到当前绑定的 ARRAY_BUFFER,应使用哪个接口?

A

gl.bufferData

B

gl.bufferSubData

C

gl.vertexAttribPointer

D

gl.getBufferParameter

17
单选题

为避免使用到上一帧残留的状态,渲染代码应按什么顺序组织?

A

绘制、绑定、设置状态

B

绑定、设置状态、绘制

C

设置状态、绘制、绑定

D

绘制、设置状态、绑定

多选题
18
多选题

关于 WebGL 状态机与资源绑定,以下说法正确的是?

A

重复绑定同一个对象时,驱动可直接跳过实际的切换操作

B

状态切换存在调用开销,按状态分组批量绘制可减少切换次数

C

可以依赖浏览器默认状态,不必显式初始化深度与混合设置

D

删除缓冲对象前应先绑定其他对象或解除绑定

19
多选题

关于顶点数据的动态更新,以下说法正确的是?

A

bufferSubData 作用于当前绑定的缓冲对象,更新前需要先 bindBuffer

B

静态几何应使用 STATIC_DRAW,以获得更合适的存储策略

C

写入时 GPU 可能正在读取同一块缓冲,使用双缓冲可以避免冲突

D

数据不变的几何也建议标记为 DYNAMIC_DRAW,以便随时修改

20
多选题

关于顶点缓冲对象的创建与使用,以下说法正确的是?

A

STATIC_DRAW 适合几乎不变的数据,DYNAMIC_DRAW 适合频繁更新的数据

B

上传数据前必须先调用 bindBuffer 绑定目标缓冲

C

为了确保数据最新,每帧都应调用 bufferData 重新分配缓冲

D

资源不再使用时可以调用 deleteBuffer 释放显存

21
多选题

关于索引缓冲与索引绘制,以下说法正确的是?

A

索引缓冲需要绑定到 ELEMENT_ARRAY_BUFFER

B

索引从 0 开始编号,最大索引等于顶点数减一

C

顶点数超过 65535 时若仍使用 UNSIGNED_SHORT 会发生溢出

D

使用索引绘制后,顶点缠绕顺序不再影响面朝向

22
多选题

关于 attribute 的绑定与布局描述,以下说法正确的是?

A

绑定前需要调用 enableVertexAttribArray 启用对应的顶点属性

B

attribute 的位置与 program 相关,切换 program 后需要重新获取

C

交错布局时 stride 应写成单个顶点占用的字节数

D

紧密连续的单属性缓冲必须把 stride 写成元素个数

23
多选题

关于顶点布局的取舍,以下说法正确的是?

A

属性更新频率差异较大时,分离布局更适合单独更新

B

交错布局的 stride 必须等于单个顶点占用的字节数

C

交错布局只能整段重传,无法局部更新顶点数据

D

顶点属性数量受 MAX_VERTEX_ATTRIBS 限制

参考答案
1.正确 2.正确 3.正确 4.正确 5.正确 6.正确 7.B 8.A 9.B 10.B 11.C 12.B 13.B 14.B 15.A 16.A 17.B 18.A;B;D 19.A;B;C 20.A;B;D 21.A;B;C 22.A;B;C 23.A;B;D
想在手机上在线作答这套卷子?
使用微信 卷王开发者小程序/App,首页顶部扫一扫识别二维码,即可限时作答并自动判分。
了解产品 App
← 上一套 渲染管线与着色器基础专题测试 下一套 → 颜色、纹理与采样入门专题测试