我在这里读书。该initBuffers
函数用于将我们需要绘制的对象的顶点存储到Buffer中。
var triangleVertexPositionBuffer;
var triangleVertexColorBuffer;
function initBuffers() {
triangleVertexPositionBuffer = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, triangleVertexPositionBuffer);
var vertices = [
0.0, 1.0, 0.0,
-1.0, -1.0, 0.0,
1.0, -1.0, 0.0
];
gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(vertices), gl.STATIC_DRAW);
triangleVertexPositionBuffer.itemSize = 3;
triangleVertexPositionBuffer.numItems = 3;
triangleVertexColorBuffer = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, triangleVertexColorBuffer);
var colors = [
1.0, 0.0, 0.0, 1.0,
0.0, 1.0, 0.0, 1.0,
0.0, 0.0, 1.0, 1.0,
];
gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(colors), gl.STATIC_DRAW);
triangleVertexColorBuffer.itemSize = 4;
triangleVertexColorBuffer.numItems = 3;
}
现在这是为三角形定义的某种“形状”。现在,如果我想要所有类型和大小的形状,我必须triangleVertexPositionBuffer
为每个形状保留一个缓冲区,对吧?它必须被初始化吗?
每个新形状的新缓冲区对象是必须的吗?
我计划创建一个系统,可以在运行时使用按钮创建各种形状。那么这个问题有解决方案吗?如何在运行时创建新的缓冲区?是否有一个常见的现有解决方案?
如果我创建一个缓冲区对象数组,它会影响性能吗?