2013-08-27 3 views
3

나는 얼굴 인덱스 (포인트를 가리킴)와 포인트를 가지고 있으며 루프 안에 삼각형을 그려야합니다.webGL을 사용하는 drawElements

for(var i=1;i<38000;i++){ 
var vtx = new Float32Array(
[points[faces[i][1]][1],points[faces[i][1]][2],points[faces[i][1]][3], 
    points[faces[i][2]][1],points[faces[i][2]][2],points[faces[i][2]][3], 
    points[faces[i][3]][1],points[faces[i][3]][2],points[faces[i][3]][3] 
] 
); 
var idx = new Uint16Array([0, 1]); 
initBuffers(vtx, idx); 
gl.lineWidth(1.0); 
gl.uniform4f(shaderProgram.colorUniform, 0, 0, 0, 1); 
gl.drawElements(gl.LINES, 3, gl.UNSIGNED_SHORT, 0); 
unbindBuffers(); 
} 
} 

이 루틴은 아무것도 그리지 않습니다

WebGL: drawElements: bound element array buffer is too small for given count and offset 

이 내 코드입니다 : 웹 콘솔 날이 오류를 제공합니다. 어떻게 해결할 수 있습니까?

답변

5

drawElements 호출에는 두 번째 arg (개수)에 대해 다른 값이 필요합니다.

첫 번째 꺼짐 : 사용자가 그리는 꼭지점 수를 나타냅니다 (프리미티브가 아닙니다!). 그래서 (gl.TRIANGLES, 3...)은 하나의 삼각형을 그릴 것입니다. (gl.LINES, 2...)은 한 줄을 그릴 것이며, (gl.LINES, 4...)은 2를 그릴 것입니다. 그러나 (gl.LINES, 3...)은 그려야 할 대상을 무엇입니까? 귀하의 개수가 기본 유형과 일치하는지 확인하십시오.

두 번째로 idx을 버퍼에 올바르게 업로드하고 바인딩한다고 가정하면 그리기 호출에서 3을 그리는 중임을 나타내는 동안 두 개의 인덱스 만 제공했습니다. 이것은 아마도 오류의 원인 일 수 있습니다. 카운트를 2으로 변경하면 코드가 제대로 작동합니다 (다른 모든 설정이 제대로되어 있다고 가정). 적어도 당신이 받고있는 오류 메시지는 피할 수 있습니다.