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中的每一行
- 系列:一个类目中所包含的每一种数据,比如顶点位置数据、顶点颜色数据
- 系列尺寸:一个系列所对应的向量的分量数目
- 类目尺寸:一个类目中所有系列尺寸的总和
- 类目字节数:一个类目的所有字节数量
- 系列元素索引位置:一个系列在一个类目中,以集合元素为单位的索引位置
- 系列字节索引位置:一个系列在一个类目中,以字节为单位的索引位置
- 顶点总数:数据源中的顶点总数
具体代码如下所示
- 锐客网
推荐阅读
- 宽容谁
- 我要做大厨
- 增长黑客的海盗法则
- 画画吗()
- 2019-02-13——今天谈梦想()
- 远去的风筝
- 三十年后的广场舞大爷
- 叙述作文
- 20190302|20190302 复盘翻盘
- 学无止境,人生还很长