Raycasting вызывает искажения дальше от экрана, он получает? - PullRequest
0 голосов
/ 03 марта 2020

Я работал над очень элементарным raycaster, и у меня есть искажение типа "рыбий глаз". Вот код, который у меня есть:

 var a = new part(player.x,player.y,rr(player.angle-22.5+(2.25*i))[0]/accuracy,rr(player.angle-22.5+(2.25*i))[1]/accuracy);
 var c = 0, m, n;
 while (!level[Math.round(a.x)][Math.round(a.y)]) {
   a.x += a.Dx;
   a.y += a.Dy;
   c++;
 }
 n=dist(a.x,a.y,player.x,player.y);
 m=1/n*400;
 cols[i].height = Math.round(m);
 cols[i].shapeColor=rgb(n*20+10,n*20+10,n*20+10);

функция rr() просто возвращает подъем / ход введенного угла. (ввод в градусах)

часть коротка для частицы, и у меня есть x, y, delta x (Dx) и deta y (Dy)

стена помечена 1 в массиве у меня пол помечен как 0.

var level = [
  [1,1,1,1,1,1,1,1],
  [1,0,0,0,0,0,0,1],
  [1,0,0,0,0,0,0,1],
  [1,0,0,0,0,0,0,1],
  [1,0,0,0,0,0,0,1],
  [1,0,0,0,0,0,0,1,1,1],
  [1,0,0,0,0,0,0,0,0,1],
  [1,0,1,1,1,1,1,1,0,1],
  [1,0,0,0,0,0,0,0,0,1],
  [1,0,1,1,1,0,0,1,0,1],
  [1,0,0,0,1,0,0,1,0,1],
  [1,0,1,0,1,0,0,1,0,1],
  [1,0,1,0,1,0,0,1,0,1,1,1],
  [1,0,0,0,1,0,0,1,0,0,0,1],
  [1,0,1,1,1,1,1,1,1,1,0,1,1],
  [1,0,0,0,0,0,0,0,0,0,0,0,1],
  [1,0,1,1,1,1,1,1,1,1,1,0,1],
  [1,0,0,0,0,0,0,0,0,0,1,1,1],
  [1,0,1,1,1,1,1,1,1,1,1,1,1],
  [1,0,1],
  [1,0,1],
  [1,0,1],
  [1,0,1],
  [1,0,1],
  [1,0,1],
  [1,0,1],
  [1,0,1],
  [1,0,1],
  [1,0,1],
  [1,0,1],
  [1,0,1],
  [1,0,1],
  [1,0,1],
  [1,0,1],
  [1,0,1,1],
  [1,0,0,1],
  [1,1,1,1],
];

enter image description here

Я хочу, чтобы высота столбца определялась по расстоянию, и у меня в настоящее время есть 1 / расстояние, но это вызывает изогнутую стену, чем дальше она удаляется от начала актерского состава. это то, что я хочу исправить.

...