3

フェイス インデックス (ポイントを指す) とポイントがあり、三角形をループで描画したいと考えています。Web コンソールに次のエラーが表示されます。

WebGL: drawElements: bound element array buffer is too small for given count and offset

これは私のコードです:

for(var i=1;i<38000;i++){
 var vtx = new Float32Array(
 [points[faces[i][1]][1],points[faces[i][1]][2],points[faces[i][1]][3],
  points[faces[i][2]][1],points[faces[i][2]][2],points[faces[i][2]][3],
  points[faces[i][3]][1],points[faces[i][3]][2],points[faces[i][3]][3]
]
);
var idx = new Uint16Array([0, 1]);
initBuffers(vtx, idx);
gl.lineWidth(1.0);
gl.uniform4f(shaderProgram.colorUniform, 0, 0, 0, 1);
gl.drawElements(gl.LINES, 3, gl.UNSIGNED_SHORT, 0);
unbindBuffers();
}
}

ルーチンは何も描画しません。どうすれば修正できますか?

4

1 に答える 1

5

呼び出しdrawElementsには、2 番目の引数 (カウント) に別の値が必要です。

まず、描画している頂点 (プリミティブではありません!) の数を表します。したがって(gl.TRIANGLES, 3...)、単一の三角形を描画します。(gl.LINES, 2...)1 本の線(gl.LINES, 4...)を引き、2 本の線を引きますが、1 本(gl.LINES, 3...)半の線を引きますか? カウントがプリミティブ型と一致していることを確認してください。

第 2 に、バッファに適切にアップロードしてバインドしていると仮定するとidx、描画呼び出しで 3 つを描画していることを示しているのに、2 つのインデックスしか提供していません。これがおそらくエラーの原因です。count を に変更する2と、コードが機能するはずです (他のすべてが正しく設定されていると仮定します)。少なくとも、表示されるエラー メッセージは回避できます。

于 2013-08-27T22:39:01.500 に答える