2012-11-22 31 views
0

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

对于每个对象我有一个包含在顶点缓冲器面的索引的缓冲液:

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

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

所以,在此之后,该对象的平局三角形我做的:

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

但我在屏幕上什么都没有,我有这样的警告:

的WebGL:INVALID_OPERATION:drawElements:attribs没有正确设置

什么可能是我的错误?

感谢

回答

2

我想你错过了哪些链接JavaScript的顶点缓冲代码着色器drawElements之前的属性()。

如:

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); 
+0

感谢您的答复,我接着说:gl.vertexAttribPointer(shaderMaterial.attributes.aPosition,3,gl.FLOAT,假,0,0);'但是我有同样的问题。 我使用库THREE.js版本53,shaderMaterial允许在对象的纹理上使用着色器。 – lanfeustXIII