2017-10-06 16 views
2

레이 캐스팅 기술을 사용하여 프로젝트를 시작했습니다. GitHub Project 레이의 길이 (플레이어의 벽에서부터 벽까지의 거리)를 찾으려면 저는 하나씩 증가시킵니다. 그러나 시간이 오래 걸리며 정확하지 않은 &이라는 몇 가지 문제가 텍스처링에 어려움이 있습니다.dda 알고리즘 - 레이 캐스팅

da 알고리즘을 구현하려했는데, 1에서 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

선 라인 /면/삼각형/쿼드 교차 '(1)'작업이 방정식을 도출 O처럼 사용 voxelization 알고리즘 (또는 구글) 그냥 사용 이것을 위해 루프가 필요 없습니다. – Spektre

답변

0

당신은 벽 광선의 교차점을 찾기 위해 DDA 또는 Bresenham 알고리즘을 필요가 없습니다.

주어진 테두리 (또는 상자 가장자리)가있는 교차 부분이 필요하면 광선 방정식 및 경계 위치로 계산하십시오.

당신은 그리드 셀과 교차 얻고 싶은 경우에 - Amanatides-Woo