-1

数学の無知を前もって許してください。他に役立つ情報源が見つからなかったので、このトピックを開かなかったでしょう

JavaScript で単純なレイキャスティング エンジンを作成したいのですが、タイル システムを処理するのは難しくなく、過去にその経験がありました。

私のソースhttp://www.permadi.com/tutorial/raycast/index.html および http://dev.opera.com/articles/view/creating-pseudo-3d-games-with-html-5-can- 1/

私の問題は、ほとんどの数学を理解することです。彼が使用したトリガーの一部は理解していますが (2 番目のリンクで)、彼のレイキャスティングの実装のほとんどを理解していません。

この行のように: // where on the screen does ray go through?

    `var rayScreenPos = (-numRays/2 + i) * stripWidth;`

何のポーズ?xy座標? 画面にリンス?

castSingleRay私は数学のいくつかを理解していますが、彼が話している傾斜や「垂直マップ/壁の線」は理解していません.

それを理解するには何を学ぶ必要がありますか?数学やプログラミングのどのトピックですか? ダウンロードできる良い本やオンラインソースはありますか?

4

2 に答える 2

0

基本的なレイキャスティングを理解する最善の方法は、そのすばらしい記事全体を実際に読むことです。

とにかく、あなたが話している方程式は、ステップ 3 の壁を見つけることからのものです。FOV (field of view) の説明の部分として、結果の画像は垂直部分 (オペラ チュートリアルではストリップと呼ばれます) に分割される場合があり、これらのサイズは px 単位で異なる場合があります (オペラ チュートリアルでは幅 4px を使用します)。

x次に、画面上のどの座標が px 単位の現在のストライプ (レイキャスト計算に現在使用しているストライプ) であるかを調べようとしています。それがrayScreenPos変数です。左軸の境界(視聴者として、最も左のストライプではなく中央のストライプを見ていることに応じて!) と現在のストライプを取得し、ストリップのサイズ (ピクセル単位) を掛けて、値 (xリコールのための px 単位の位置) を決定することができます。x-numRays/2istripWidth

次に、計算されたストライプから視聴者の距離を簡単に計算できます。そこで、ピタゴラスの定理を使って を計算しrayViewDistます。

編集

私の最初のレイトレーサーの実装には数週間かかりました (だからあなたの絶望を理解しています)。ビューアーとは、「カメラの位置」を意味します。Opera dev tut は FOV = 60、stripeSize = 4px であり、光線の数は numberOfStripesInImage = sizeOfImage / sizeOfSplice -> 320/4 -> 80 ray.. 次に、最初の rayScreenPos は (-80/2 + 0) * 4 です。 -> -160 は、中央のストライプの画面中心に対する x 位置です (ビューは画面の中心を見ています)

于 2013-02-11T13:00:53.037 に答える