drawElements使用

时间:2012-11-22 10:21:16

标签: webgl

我在WebGL中创建了一个小应用程序,我有两个移动的对象,一个立方体和一个球体。 我用着色器修改对象,每个对象都有着色器。所以我想在确定的时间在显示器上更新对象,为此我使用drawElements函数。

对于每个对象,我有一个缓冲区,其中包含顶点缓冲区中面的索引:

gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indexBuffer);
gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, new Uint16Array(indices), gl.STREAM_DRAW);
indexCount = indices.length;

indices是一个包含每个面的索引值的数组。 (每个面3个值,我们使用三角形)。

所以,在此之后,对于我所做的对象的绘制三角形:

gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, indexBuffer);
gl.drawElements(gl.TRIANGLES, indexCount, gl.UNSIGNED_SHORT, 0);

但我屏幕上什么都没有,我有这个警告:

WebGL:INVALID_OPERATION:drawElements:attribs设置不正确

我的错误是什么?

由于

1 个答案:

答案 0 :(得分:2)

我认为你错过了在drawElements()之前将javascript顶点缓冲区链接到着色器属性的代码。

e.g:

gl.bindBuffer(gl.ARRAY_BUFFER, meshVertexPositionBuffer); 
gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute, 
                     meshVertexPositionBuffer.itemSize, gl.FLOAT, false, 0, 0); 
gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, meshIndexBuffer);
gl.drawElements(gl.TRIANGLES, meshIndexBuffer.numberOfItems, gl.UNSIGNED_SHORT, 0);