1. 创建缓冲区的步骤
- 创建缓冲区对象(
gl.createBuffer()
) - 绑定缓冲区对象(
gl.bindBuffer()
) - 将数据写入缓冲区(
gl.bufferData()
) - 将缓冲区对象分配给一个attribute变量(
gl.vertexAttribute()
); - 开启attribute变量(
gl.enableVertexAttribArray()
)。
//这是一种特殊的数组
var vertices=new Float32Array([0.0,0.5,-0.5,-0.5,0.5,-0.5])
var vertexBuffer=gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER,vertexBuffer);
gl.bufferData(gl.ARRAY_BUFFER,vertices,gl_STATIC_DRAW);
var a_Position=gl.getAttributeLocation(gl.program,'a_Position');
gl.vertexAttribPointer(a_Position,2,gl_FLOAT,false,0,0);
gl.enableVertexAttributArray(a_Position);
2.函数说明
1.gl.createBuffer(),无参数,返回缓冲区对象。
2.gl.bindBuffer(target,buffer),buffer为开始创建的缓冲区对象。target为gl.ARRAY_BUFFER表示缓冲区中包含了顶点数据。或是gl.ELEMENT_ARRAY_BUFFER表示缓冲区中包含了顶点的索引。返回buffer
3.gl.bufferData(target,data,usage),target为gl.ARRAY_BUFFER或是gl.ELEMENT_ARRAY_BUFFER。usage为gl.STATIC_DRAW表示只会向缓冲区写入一次数据,但需要绘制很多次。gl.STREAM_DRAM表示只会向缓冲区写入一次数据然后绘制若干次。gl.DYNAMIC_DRAm表示会想缓冲区写入多次数据并且绘制多次。data为类型化数组有如Int8Array,UInt8Array,Float32Array,Float64Array等,主要为了提高处理效率。
4.gl.vertexAttribPointer(location,size,type,nomalized,stride,offset)
size为每个顶点的分量个数1-4,缺失的补1.
type为数据类型:gl.UNSIGNED_BYTE,gl.SHORT,gl.INT等
stride:指定相邻顶点的间的字节数。
offset:指定缓冲区对象中的偏移量。