В моем расовом двигателе у меня есть эта действительно раздражающая ошибка. Если игрок приближается к объекту, возникает огромный эффект линзирования. Я уже посмотрел на этот вопрос и попытался исправить его. Вот код в моей текущей реализации части raycasting (он находится в моем методе рисования). Затем я рисую текст на экране.Lensing in my raycasting engine
double distance;
double lineHeight=-1;
double angleOff;
double angleCast;
for(int i=0;i<900;i++){
//i is the line across from the side.
angleOff=Math.atan(((i-450.0)/4000.0)/.1);
boolean hit=false;
board.setColor(GameFrame.m.getBackground());
board.drawLine(i, 922, i, 0);
for(double rayDist=0;!hit;rayDist+=.01){
try{
char block=Map.map[(int) (Map.p.x+Math.sin(angleOff+Map.p.angle)*rayDist)][(int) (Map.p.y-Math.cos(angleOff+Map.p.angle)*rayDist)];
if(block!='o'){
lineHeight=800/(rayDist*Math.abs(Math.cos(angleOff+Map.p.angle)));
switch(block){
case 'w':
board.setColor(Color.BLACK);
break;
case 'z':
board.setColor(Color.red);
break;
case 'g':
board.setColor(Color.green);
break;
case 'a':
board.setColor(Color.DARK_GRAY);
break;
}
hit=true;
}
}catch(Exception e){
hit=true;
lineHeight=800/(rayDist*Math.abs(Math.cos(angleOff+Map.p.angle)));
board.setColor(Color.black);
}
}
board.drawLine(i,(int) (461-(lineHeight/2)), i,(int) (461+(lineHeight/2)));
}
Обратите внимание, что Map.p.angle
угла (от лицевой стороны вверх) в радианах объекта игрока. Также обратите внимание, что Карта хранится как char[][]
, где «w» - стена, «z» - зомби, «g» - это пушка, а «а» - боеприпасы. Если кто-то может сообщить мне, что вызывает этот объектив, я буду очень благодарен. Вот некоторые скриншоты Нормальная функция Bug Еще изображения
Если кто-нибудь может мне сказать, что коррекция должна применяться я буду очень доволен.