如何在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修改索引緩衝區和頂點緩衝區。但是索引緩衝區比頂點緩衝區小,因此分配新緩衝區並填充它比在運行時修改頂點便宜。但是我錯誤地理解了你的問題嗎? –