1

ゲームの場合、光と影を計算しようとしています。このために、キャンバスを正方形の領域に分割し、プレーヤーから各正方形の位置に向かう途中で光線がブロックされるかどうかを計算します。私は今、これらの計算でかなり良いパフォーマンスを達成することができました。

結果は、目に見えない領域を暗い四角形で覆うことによって視覚化されます ( Canvas.fillRect(...)) が、このステップは、計算に適切な解像度、つまり約 10,000 の四角形が必要な場合にコストがかかりすぎます。最初にそれらをオフスクリーン キャンバス (= バッファ) にレンダリングしてから、表示されているキャンバスにバッファを描画しようとしましたが、顕著なパフォーマンスの向上は見られませんでした。

見逃したものはありますか、または描画を固定する他の方法はありますか?

アップデート:

影響を受けるコードは次の場所にあります: https://github.com/otruffer/Ape_On_Tape/blob/master/src/client/js/visibility.js (コードは大きすぎてここに投稿できません)

実際の描画は、このファイルの下部で行わdrawCloudAt(...)れます。flushBuffer()

4

1 に答える 1

1

ソフトウェアでリアルタイムのライト計算を行うと、常にパフォーマンスが低下します。代わりに、ビデオ カードで光の計算を行う実際の 3D エンジンを使用することを検討しましたか? はい、Javascript でそれができるようになりました。この新機能は WebGL と呼ばれます。

ライトマップをより高速に適用する方法が必要な場合は、fillRect を使用する代わりに、キャンバスの RGB 値を直接操作できます。getImageData を使用して、キャンバスの生の 8 ビット RGBA 値の配列を取得できます。その後、この配列を操作して、putImageData で元に戻すことができます。

于 2012-12-12T15:25:07.147 に答える