とありがとうございます。どのようにgl.drawElementsが対応する頂点配列バッファを "見つけ"ますか?
私はWebglで非常に新しく、drawElementsメソッドと描画したい現在の頂点バッファの間のリンクを実際に理解していません。 drawArrayメソッド(バッファの作成、コンテキストへのバインド、データの埋め込み、対応する属性の指し示し、描画など)について、おおよそのことを理解しています。私は、インデックス配列と少ない頂点データと同じことをしようとする。しかし、私はこのタイプのエラーが発生します。
[.Offscreen-For-WebGL-0x7fae2b940800]GL ERROR :GL_INVALID_OPERATION : glDrawElements: bound to target 0x8893 : no buffer
たぶん私のコードのヒントはあなたを助けることができます。
const cube = new Program(renderer.gl, vertex3d, fragment); // my webgl program
const cubeData = new Cube(); // Only array of vertices/indices
const cubeVertexPosition = new ArrayBuffer(renderer.gl, cubeData.vertices, 'STATIC_DRAW'); // ARRAY_BUFFER
const cubeVertexIndices = new IndexBuffer(renderer.gl, renderer.gl.UNSIGNED_SHORT, cubeData.indices, 'STATIC_DRAW'); // ELEMENT_ARRAY_BUFFER
cubeVertexPosition.attribute('aPosition', 3, 'FLOAT', false); // define attribute corresponding in vertex shader
cubeVertexPosition.attributePointer(cube); // enableVertexAttribArray + vertexAttribPointer
[...]
cubeVertexIndices.draw('TRIANGLES', 0, 36); // drawElements with gl.UNSIGNED_SHORT type
私はdrawArrayでそれを描くことに成功しています:)
([...]だけ制服のための変換行列れます)。
たぶん、あなたは私が、
おかげで多くのことを、この黒魔術を理解するのに役立つ可能性が心の中で急速にヒントがあります!
感謝を読んでお勧めしたいです。それは私にはもう少し明白です。 2つの配列のあなたのスキーマは物事がどのようにリンクされているかを説明していますが、リンクは明白にはっきりしていません。どのARRAY_BUFFERがELEMENT_ARRAY_BUFFERにリンクされているかを指定する方法はありますか? –
「リンク」は、 'drawElements'を呼び出すときにどのバッファがバインドされているかによって異なります。'ELEMENT_ARRAY_BUFFER'を' ELEMENT_ARRAY_BUFFER'で 'target'と呼ぶと、要素(インデックス)バッファがバインドされています。属性(頂点)バッファがバインドされている' ARRAY_BUFFER'で 'bindBuffer'を呼び出します。これはそれと同じくらい簡単です。この部分を指定するために私の答えを編集します。 – dest1