如何在webgl中使用子缓冲区绘制缓冲区? 例如,我有不同的观点来创建一条线,但包含了我不想连接的部分。使用子缓冲区绘制缓冲区webgl
///Example code
var lines = [
[0, 0, 0, 1, 1, 1],
[2, 2, 2, 3, 3, 3],
[5, 5, 5, 7, 7, 7]
];
var colores = [
[10, 43, 100, 1, ],
[0, 100, 0, 1],
[100, 100, 0, 1]
]
for (var i = 0; i < lines.length; i++) {
lineVertexPositionBuffer[i] = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, lineVertexPositionBuffer[i]);
lineVertexPositionBuffer[i].itemSize = 3;
lineVertexPositionBuffer[i].numItems = line[i].length/3;
colorVertexBuffer[i] = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, colorVertexBuffer[i]);
gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(colores[i]), gl.DYNAMIC_DRAW);
colorVertexBuffer[i].itemSize = 4;
colorVertexBuffer[i].numItems = colores[i].length/4;
}
function DrawScene() {
for (var i = 0; i < lineVertexPositionBuffer.length; i++) {
gl.bindBuffer(gl.ARRAY_BUFFER, colorVertexBuffer[i]);
gl.vertexAttribPointer(currentProgram.textureCoordAttribute, colorVertexBuffer[i].itemSize, gl.FLOAT, false, 0, 0);
gl.bindBuffer(gl.ARRAY_BUFFER, null);
gl.bindBuffer(gl.ARRAY_BUFFER, lineVertexPositionBuffer[i]);
gl.vertexAttribPointer(currentProgram.vertexPositionAttribute, 3, gl.FLOAT, false, 0, 0);
gl.drawArrays(gl.LINE_STRIP, 0, lineVertexPositionBuffer[i].numItems);
gl.bindBuffer(gl.ARRAY_BUFFER, null);
}
}
是好的,但我需要这是动态的。因为这些行可能会更改,添加更多或删除它们。 – Julio
@Julio您可以使用BufferSubData修改索引缓冲区和顶点缓冲区。但是索引缓冲区比顶点缓冲区小,因此分配新缓冲区并填充它比在运行时修改顶点便宜。但是我错误地理解了你的问题吗? –