WebGL中缓冲区对象的使用方法

 使用缓冲区对象向顶点着色器传入多个顶点数据,需要遵循以下五个步骤。

  • 1. 创建缓冲区对象 gl.createBuffer() -- 删除缓冲区对象 gl.deleteBuffer()

gl.createBuffer() 创建缓冲区对象,返回创建成功的对象或者 null
gl.deleteBuffer(buffer) 传入缓冲区对象buffer,意为删除缓冲区对象

  • 2. 绑定缓冲区对象 gl.bindBuffer()

gl.bindBuffer(target, buffer);
    target 参数可以是下面中的一个
        gl.ARRAY_BUFFER 表示缓冲区对象中包含了顶点的数据
        gl.ELEMENT_ARRAY_BUFFER 表示缓冲区对象中包含了顶点的索引值
    buffer 指定之前由gl.createBuffer返回的待绑定的缓冲区对象
该方法将缓冲区对象绑定到ARRAY_BUFFER 上或者 ELEMENT_ARRAY_BUFFER 上,两种择其一,规定后面读缓冲器中数据的方式

  • 3. 将数据写入缓冲区对象 gl.bufferData()

gl.bufferData(target, data, useage)
    target, gl.ARRAY_BUFFER 或 gl.ELEMENT_ARRAY_BUFFER 中的一个,意思与上文相同
    data, 要写入的数据
    useage, 表示程序将如何使用缓冲区对象中的数据,该参数将帮助WebGL优化操作,但是及时传入错误的值也不影响程序,只是会降低程序效率,取以下值
        gl.STATIC_DRAW, 只会向缓冲区对象写入一次数据,但需要绘制很多次
        gl.STREM_DRAW, 只会向缓冲区对象写入一次数据,然后绘制若干次
        gl.DYNAMIC_DRAW, 会向缓冲区对象多次写入数据,并绘制很多次

  • 4. 将缓冲区对象分配给一个 attribute 变量 gl.vertexAttribPointer()

gl.vertexAttribPointer(location, size, type, normalized, stride, offset)
    location, 指定待分配给attribute 变量的存储位置
    size, 指定缓冲区中每隔顶点的分量个数(1到4),缺失按照gl.vertexAttrib[1234]f() 方法自动补齐
    type, 用以下类型之一来指定数据格式:
        gl.UNSIGNED_BYTE, 无符号字节 UInt8Array
        gl.SHORT, 短整型, Int16Array
        gl.UNSIGNED_SHORT, 无符号短整型, UInt16Array
        gl.INT, 整型, Int32Array
        gl.UNSINGED_INT, 无符号整型,UInt32Array
        gl.FLOAT, 浮点型,Float32Array
    normalize, 传入true 或者 false 表明是否将非浮点型的数据归一化到 [0, 1] 或 [-1, 1] 区间
    stride, 指定相邻两个顶点间的字节数,默认为0 
    offset, 指定缓冲区对象中的偏移量(以字节为单位),即attribute 变量从缓冲区中的何处开始存储,如果是从起始位置则传入0
这个方法与 gl.vertexAttrib[1234]f() 方法差不多,都是向变量中存入数据,只是该方法可以指定缓冲区对象的地址存入到指定的 attribute 变量中。

  • 5. 开启attribute 变量 gl.enableVertexAttribArray()

gl.enableVertexAttribArray(location)
    location, 指定attribute 变量的存储位置
该方法开启 attribute 变量,使WebGL(准确的说是顶点着色器)可以使用缓冲区的的数据
gl.diableVertexArray(location)
    location, 同上,指定要关闭的 attribute 变量
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值