Я создаю Ray Tracer на java, и мне просто нужно распечатать каждую из трех сфер, которые я сделал.
Я создал 3 сферических объекта и сохранил их в файле arrayylist в основном файле, который теперь передаю на камеру, чтобы создать изображение.
Для этого мне нужно выяснить:
- Если точка пересечения не нулевая, получите расстояние между началом луча и точкой пересечения.
- Если это первая сфера во внутреннем цикле, установите переменную на это расстояние - если нет, посмотрите, меньше ли это расстояние, чем ранее измеренное расстояние - если да, сохраните это расстояние для сравнения с другими сферами и установите индекс ближайшей сферы на индекс оцениваемой сферы (счетчик, используемый во внутреннем цикле, проходящем через сферы).
- Вне этого внутреннего цикла запишите пиксель обратно в буферное изображение, но при вызове
localReflectionModel
используйте ближайшую сферу (используя индекс ближайшей сферы, которую вы сохранили во внутреннем цикле).
Код:
for(int x = 0; x < filmResolutionX; x++) {
for(int y =0; y < filmResolutionY; y++) {
for (int z = 0; z < s.size(); z++) {
double planeX = -0.5+ x / (double) filmResolutionX;
double planeY = 0.5 - y / (double) filmResolutionY;
double planeZ = 1;
Coord3D planes = new Coord3D(planeX, planeY, planeZ);
Coord3D Origin = new Coord3D(0,0,0);
Ray plane = new Ray(Origin, planes);
Coord3D iPoint = plane.intersectionPoint(s.get(z));
Color colorSphere = new Color(0xD72448);
if (iPoint != null){
double distance = plane.getOrigin().distanceBetween(iPoint);
}
if (z == 0) {
double distanceCheck1 = plane.getOrigin().distanceBetween(iPoint);
} else if (z != 0) {
}
if (iPoint == null) {
newImage.setRGB(x, y, 0);
} else {
colorSphere = s.get(z).localReflectionModel(iPoint, l, plane);
int rgb = colorSphere.getRGB();
newImage.setRGB(x, y, rgb);
}
}
}
}
return newImage;
}
}
У меня проблемы с попыткой сравнить расстояния от предыдущих сфер. Когда я пытаюсь сослаться на переменные Distance или Distance check 1, я получаю сообщение об ошибке, говорящее, что расстояние не может быть разрешено в переменной