Ошибка с двигателем рендеринга в стиле Doom в JavaJAVA

Программисты JAVA общаются здесь
Anonymous
Ошибка с двигателем рендеринга в стиле Doom в Java

Сообщение Anonymous »

public void render(Graphics2D graphics, Vector2 position, double angle) {
angle = clampAngle(angle);
if (map == null) return;

final double da = fov / (double)(RESOLUTION.width - 1);
double currentAngle = clampAngle(-fov / 2.0d) + angle;
currentAngle = clampAngle(currentAngle);

for (int x = 0; x < RESOLUTION.width; ++x) {
if (x == 400) System.out.println(currentAngle);

final double rayDist = raycast(position, currentAngle);
if (rayDist == -1d) continue;

final double dist = rayDist * Math.cos(Math.toRadians(currentAngle - angle));
final double height = wallHeight / dist;

graphics.fillRect(x, (int)((RESOLUTION.height - height) / 2d), 1, (int)height);
currentAngle += da;
currentAngle = clampAngle(currentAngle);
}
}

private double raycast(Vector2 origin, double angle) {
angle = clampAngle(angle);

final double increment = .025d;
final double rad = Math.toRadians(angle);

Vector2 dp = new Vector2(Math.sin(rad), Math.cos(rad)).multiply(increment);
Vector2 at = new Vector2(origin);

double dist = 0d;

for (int i = 0; i < (int)(viewDist / increment); ++i) {
at.plusEquals(dp);
dist += increment;

if (map.intercepts(at)) return dist;
}

return -1d;
}

private double clampAngle(double angle) {
while (angle = 360d) angle -= 360d;
if (angle < 0d) angle += 360d;

return angle;
}
< /code>
Поздравляю, если вы все еще читаете это LOL. Таким образом, в основном проблема заключается в том, что когда я поворачиваю камеру примерно более -50 (+310) градусов, функция raycast всегда возвращает -1 (что в моем коде означает, что ничего не было поражено), что приводит к тому, что весь рендер прекратил работу. Я приложу несколько снимков экрана. < /P>
(работа нормально)
< /p>
(грубо он сломается, но он повернулся [+50], все еще работает нормально)

Подробнее здесь: https://stackoverflow.com/questions/796 ... ne-in-java

Вернуться в «JAVA»