2017-08-19 4 views
0

私はレイキャスターを作っています。レイオブジェクトはVect2 originVect2 directionです。 originはカメラのベクトルです。方向はこのコードで計算されます2次元の光線が四角と交差する

var a = (cam_dir - fov) + (((fov * 2)/width) * x); 
// x is the current x position of the screen. width is screen width 
var b = a * Math.PI/180; // radians 
ray.direction = new Vect2(Math.sin(b), Math.cos(b)); 

レイキャスターの世界は配列です。各項目は0または正の数です。私はこれらの値をループし、これは私が助けを必要とするところです。

上記のように計算されたレイと幅1のボックスがある場合、レイからボックスまでの線の距離までの距離はどのようにして求められますか?

私はひどくコメントしたコードをこのペーストビンに見せたいと思っています。私は助けが必要なコメントがあります。 https://pastebin.com/vPfGzzdM

がまたそこにはあなたがVect2.addを加算または減算する必要性やドットがされていないか、などなどを渡り、私はそれを行う方法を知っていると私も非常に多くの時間がので、それらを定義していませんでした:) UUUUをありがとう

答えて

0

グリッドのすべての交差点を見つける必要がある場合は、Amanatides-Wooアルゴリズムのリンクについてhereと表示されます。

のみ(direction.x符号に応じて)四角形の左端または右端のための1つの正方形、

x = origin.x + direction.x * t 
y = origin.y + direction.y * t 

光線のパラメトリック方程式を作成し、正方形のエッジのためにそれらを解決する検索パラメータtと、トップのための場合または方角の下端(direction.yの記号に依存)。交差点が実際の四角いエッジ上にあることを確認してください(継続ではありません)。有効な交差点が2つある場合は、tより小さい値を選択してください。

line clippingのアルゴリズムもあります。

関連する問題