Webgl 付款人使用
我在WebGL中创建了一个小应用程序,我有两个移动的对象,一个立方体和一个球体。 我用着色器修改对象,每个对象都有它的着色器。因此,我希望在确定时间更新显示器上的对象,为此,我使用Webgl 付款人使用,webgl,Webgl,我在WebGL中创建了一个小应用程序,我有两个移动的对象,一个立方体和一个球体。 我用着色器修改对象,每个对象都有它的着色器。因此,我希望在确定时间更新显示器上的对象,为此,我使用drawerelements函数 对于每个对象,我都有一个缓冲区,其中包含顶点缓冲区中面的索引: gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indexBuffer); gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, new Uint16Arra
drawerelements
函数
对于每个对象,我都有一个缓冲区,其中包含顶点缓冲区中面的索引:
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:无效的\u操作:抽屉元素:属性未正确设置
我的错误可能是什么
谢谢我想您错过了将javascript顶点缓冲区链接到DrainElements()之前着色器属性的代码 e、 g:
感谢您的回复,我添加了
gl.vertexattributepointer(shaderMaterial.attributes.aPosition,3,gl.FLOAT,false,0,0)但是我有同样的问题。我使用库THREE.js版本53,shaderMaterial允许在对象的纹理上使用着色器。
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);