2017-10-06 21 views
2

レイキャスティング技術を使用してプロジェクトを開始しましたGitHub Project レイの長さ(プレイヤーから壁までの距離)を見つけるには、1だけ増分します。しかし、それにはいくつかの問題があり、時間がかかり、不正確な&はテクスチャリングには難しいでしょう。ddaアルゴリズム - レイキャスティング

私はdaでアルゴリズムを実装しようとしましたが、これはちょうど1だけ増分されません - >彼はグリッドを通り、正確な位置を返します。

http://www.geeksforgeeks.org/dda-line-generation-algorithm-computer-graphics/

ことまたは任意のヒントを持つ人の経験を持っていますか?

ませアルゴリズムの道ません:

for(let resolution = 0; resolution < display.width/2; resolution++){ //every 2nd px gets scanned 
     let ray = this.pov + (-this.fov/2 + this.fov/(display.width/2) * resolution); 
     let distance = 0, hit = false; 

     /*ugly way of raycasting!*/ 
     do{ 
      let x = this.x + distance * Math.cos(ray * (Math.PI/180)); 
      let y = this.y + distance * Math.sin(ray * (Math.PI/180)); 
      if(map[Math.floor(x/block)][Math.floor(y/block)]){ 
       distance = Math.sqrt(Math.pow(this.x - x, 2) + Math.pow(this.y - y, 2)); 
       hit = true 
      } 
      distance += 1; 
     }while(!hit); 
     distance = convert/distance; 
     canvas.fillStyle = "#fff"; 
     canvas.fillRect(resolution * 2, display.height/2 - distance/2, 2, distance); 
    } 
+0

線ライン/プレーン/三角/クワッド交差点は 'O(1)'操作式を導出(またはそれをグーグル)だけを使用することであるようにボクセル化アルゴリズムを使用しますこれにはループが必要ありません。 – Spektre

答えて

0

あなたは壁と線の交点を見つけるために、DDAやブレゼンハムアルゴリズムを必要としません。

指定された境界(またはボックスの端)に1つの交差点が必要な場合は、光線方程式と境界線の位置を計算するだけです。

あなたはグリッドセルとの交点を取得したい場合は - Amanatides-Woo

関連する問題