0

WebGLで小さなアプリケーションを作成します。移動するオブジェクトは、立方体と球の2つです。オブジェクトをシェーダーで変更します。各オブジェクトにはシェーダーがあります。したがって、決定時にディスプレイ上のオブジェクトを更新する必要があります。このために、drawElements関数を使用します。

オブジェクトごとに、頂点バッファ内の面のインデックスを含むバッファがあります。

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

indexは、各面のインデックスの値を含む配列です。(面ごとに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 に答える