0

我在 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:属性设置不正确

我的错误可能是什么?

谢谢

4

1 回答 1

2

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

例如:

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);
于 2012-11-22T13:55:38.583 回答