3

我有面部索引(指向点)和点,并且想在循环中绘制三角形。Web 控制台给了我这个错误:

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

这是我的代码:

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();
}
}

该例程不绘制任何内容。我该如何解决?

4

1 回答 1

5

您的drawElements调用需要为第二个参数(计数)设置不同的值。

首先:它表示您正在绘制的顶点数(不是图元!)。所以(gl.TRIANGLES, 3...)会画一个三角形。(gl.LINES, 2...)会画一条线,(gl.LINES, 4...)会画 2 条线,但(gl.LINES, 3...)会画,什么,一条半线?确保您的计数与原始类型匹配。

其次,假设您正确上传idx到缓冲区并绑定它,您只提供了两个索引,而您的绘图调用表明您正在绘制三个。这可能是您的错误的原因。将计数更改为2,您的代码应该可以工作(假设您已正确设置其他所有内容)。至少你会避免你得到的错误信息。

于 2013-08-27T22:39:01.500 回答