頂点配列を WebGL テクスチャに格納しようとしていますが、正しく行う方法がわかりません。これの目的は、頂点をフラグメント シェーダーに渡し、レイトレーシング用に処理することです。
現在、私の JavaScript コードは次のようになっています。
var a = new ArrayBuffer();
// Model.VerticeMap is an array holding all vertices [x1, y1, z1, x2, y2, z2, ...]
a = Model.VerticeMap; // array length: 36864
var dataArray = new Float32Array(a);
var vMapTexture = gl.createTexture();
gl.bindTexture(gl.TEXTURE_2D, vMapTexture);
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGB, 2, 2, 0, gl.RGB, gl.FLOAT, dataArray);
テクスチャの幅と高さが 2 の場合、エラーは発生しません。値を大きくすると、エラーが発生しますArrayBufferView not big enough for request
。
OES_texture_float
テクスチャの float 値にも拡張を使用しています。
私がそこで何をしているのか 100% 確信が持てないことを認めなければなりません。このコードでエラーが発生しないようになったときは、ちょっとうれしかったです。私の主な考えは、すべての頂点の x、y、z 値をテクスチャのすべてのピクセルの r、g、b 値として保存することでした。したがって、テクスチャ サイズは、3D モデルの三角形の数以上にする必要があります。残念ながら、WebGL のテクスチャ サイズは 2 の累乗に制限されています。シーンで複数のモデルをレンダリングする予定なので、頂点の数も可変にする必要があります。
WebGL のフラグメント シェーダーに頂点を送信する際の問題を解決するための、 ArrayBuffer
、 a 、Float32Array
およびコマンドの正しい使用法に関する支援をいただければ幸いです。texImage2D()