1. 創(chuàng)建緩沖區(qū)的步驟
- 創(chuàng)建緩沖區(qū)對象(
gl.createBuffer()
) - 綁定緩沖區(qū)對象(
gl.bindBuffer()
) - 將數(shù)據(jù)寫入緩沖區(qū)(
gl.bufferData()
) - 將緩沖區(qū)對象分配給一個(gè)attribute變量(
gl.vertexAttribute()
); - 開啟attribute變量(
gl.enableVertexAttribArray()
)。
//這是一種特殊的數(shù)組
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.函數(shù)說明
1.gl.createBuffer(),無參數(shù)轮蜕,返回緩沖區(qū)對象滔以。
2.gl.bindBuffer(target,buffer),buffer為開始創(chuàng)建的緩沖區(qū)對象。target為gl.ARRAY_BUFFER表示緩沖區(qū)中包含了頂點(diǎn)數(shù)據(jù)歼捐『温剑或是gl.ELEMENT_ARRAY_BUFFER表示緩沖區(qū)中包含了頂點(diǎn)的索引。返回buffer
3.gl.bufferData(target,data,usage),target為gl.ARRAY_BUFFER或是gl.ELEMENT_ARRAY_BUFFER豹储。usage為gl.STATIC_DRAW表示只會向緩沖區(qū)寫入一次數(shù)據(jù)贷盲,但需要繪制很多次。gl.STREAM_DRAM表示只會向緩沖區(qū)寫入一次數(shù)據(jù)然后繪制若干次剥扣。gl.DYNAMIC_DRAm表示會想緩沖區(qū)寫入多次數(shù)據(jù)并且繪制多次巩剖。data為類型化數(shù)組有如Int8Array,UInt8Array,Float32Array,Float64Array等,主要為了提高處理效率钠怯。
4.gl.vertexAttribPointer(location,size,type,nomalized,stride,offset)
size為每個(gè)頂點(diǎn)的分量個(gè)數(shù)1-4佳魔,缺失的補(bǔ)1.
type為數(shù)據(jù)類型:gl.UNSIGNED_BYTE,gl.SHORT,gl.INT等
stride:指定相鄰頂點(diǎn)的間的字節(jié)數(shù)。
offset:指定緩沖區(qū)對象中的偏移量晦炊。