어떻게 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로 인덱스 버퍼와 정점 버퍼를 모두 수정할 수 있습니다. 그러나 인덱스 버퍼는 버텍스 버퍼보다 작으므로 새로운 버퍼를 할당하고 버퍼를 채우는 것은 런타임에 버텍스를 수정하는 것보다 저렴합니다. 하지만 귀하의 질문을 잘못 이해 했습니까? –