webgl|webgl 纹理

【webgl|webgl 纹理】对于绘制多个点,并且多个点的颜色需要不一样。单个attribute是不能够完成的,这时候需要多个attribute来实现


多个attribute,需要多个buffer来共享数据。比如颜色数据批量传递给着色器
//颜色数据 const colors = new Float32Array([ 1, 0, 0, 0, 1, 0, 0, 0, 1, ]); //缓冲对象 const colorBuffer = gl.createBuffer(); //绑定缓冲对象 gl.bindBuffer(gl.ARRAY_BUFFER, colorBuffer); //写入数据 gl.bufferData(gl.ARRAY_BUFFER, colors, gl.STATIC_DRAW) //获取attribute 变量 const a_Color = gl.getAttribLocation(gl.program, 'a_Color') //修改attribute 变量 gl.vertexAttribPointer(a_Color, 3, gl.FLOAT, false, 0, 0) //赋能-批处理 gl.enableVertexAttribArray(a_Color)

按照上面的方式可以绘制不同颜色的点
attribute数据合一 上面这个绘制方式会导致很多的重复代码,不利于代码的维护。我们可以把多个attribute统一。在统一之前需要明白下面的概念
  • 数据源:整个合而为一的数据source
  • 元素字节数:32位浮点集合中每个元素的字节数
  • 类目:一个顶点对应一个类目,也就是上面source中的每一行
  • 系列:一个类目中所包含的每一种数据,比如顶点位置数据、顶点颜色数据
  • 系列尺寸:一个系列所对应的向量的分量数目
  • 类目尺寸:一个类目中所有系列尺寸的总和
  • 类目字节数:一个类目的所有字节数量
  • 系列元素索引位置:一个系列在一个类目中,以集合元素为单位的索引位置
  • 系列字节索引位置:一个系列在一个类目中,以字节为单位的索引位置
  • 顶点总数:数据源中的顶点总数
    具体代码如下所示
- 锐客网

    推荐阅读