缓冲区对象
1 2
| gl.vertexAttrib4fv(a_Position,position) gl.uniform4fv(u_FragColor,color)
|
我们使用上面的方法每次只能传入并绘制一个点,而对于多个顶点组成的对象需要一次性传入多个顶点到着色器中。
缓冲区对象可以一次性传入多个顶点数据。其实WebGL系统中的一块内存区域,可以一次性向缓冲区对象中填充大量数据,供着色器使用。
使用缓冲区对象
传入顶点数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| let vertices = new Float32Array([0.0, 0.5, -0.5, -0.5, 0.5, -0.5]) let vertexBuffer = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, vertexBuffer);
gl.bufferData(gl.ARRAY_BUFFER, vertices, gl.STATIC_DRAW);
gl.vertexAttribPointer(a_Position, 2, gl.FLOAT, false, 0, 0);
gl.enableVertexAttribArray(a_Position);
|
绘制
1 2 3 4 5
|
gl.drawArrays(gl.POINTS, 0, 3);
|