Three.jsを使用して、単純なDOM要素の上にあるwebglキャンバスレンダラーに3Dモデルを描画していますが、それらの間の衝突検出を行う必要があります。私の現在の方法は、renderer.domElement.toDataURL()を使用し、これをimageDataオブジェクトとしてロードしてから、これを別の2Dキャンバスコンテキストに描画し、getImageData()ピクセル配列をプルして、この素晴らしいピクセルコリジョン関数を使用して反復処理することです。
これは非常に遅く、フレームレートをほぼ再生不可能な約5〜8FPSまで下げます。このヒット検出を実行しないと、約40〜50FPSになります。
私の推測では、速度の低下は信じられないほど扱いにくいtoDataURL()-> load image-> drawImage()-> getImageData()です。
私の質問は次のようになります。WebGLキャンバスで利用可能なフラット化された2Dピクセルデータにアクセスするためのより良い方法はありますか?または、視差なしで3Dオブジェクトの座標を外挿するためのより良い方法はありますか?正直なところ、私が現在行っているよりも速くある種の衝突検出を取得する方法は、非常に便利です。
編集:WebGL context.readPixels()は私にとって素晴らしい働きをし、以前のクラッジと比較して超高速です。ただし、データ配列は、通常の画像ピクセルデータ配列と比較して上から下にミラーリングされていることに注意してください。コリジョンルーチンのY値チェックを反転して、これを機能させましたが、他の人はトリッキーな方法でつまずく可能性があります。幸運を!