Курсовая работа: Отрисовка сцены "Отражающиеся дорожки" алгоритмом обратной трассировки лучей
float t = radius*radius + v*v – dv.x*dv.x – dv.y*dv.y – dv.z*dv.z;
if (t < 0)
return false;
// проверка знака пересечения и того что оно самое близкое
t = v – ((float) Math.sqrt(t));
if ((t > ray.currentDistance) || (t < 0))
return false;
ray.currentDistance = t; // расстояниедообьектапересеченияприравниваетсякcurrentDistance
ray.object = this; // текущий обьект становится объектом пересечения с лучем
return true;
}
public Color Shade (Ray ray, Vector lights, Vector objects, Color bgnd) {
// направление луча увеличивается на расстояние до точки пересечения
float px = ray.initRay.x + ray.currentDistance*ray.finalRay.x;
float py = ray.initRay.y + ray.currentDistance*ray.finalRay.y;
float pz = ray.initRay.z + ray.currentDistance*ray.finalRay.z;
WorkVector p = new WorkVector (px, py, pz); // нахождениеточкипересечениялучаиобьекта
WorkVector v = new WorkVector (-ray.finalRay.x, – ray.finalRay.y, – ray.finalRay.z); // нахождениевектора– отрицательногонаправлениялуча
WorkVector n = new WorkVector((px – center.x), (py – center.y), (pz – center.z)); // находитсявектор, которомупринадлежитнормальвтекущейточкеповерхности
n.normalize(); // получаемнормаль
return surface. Shade (p, n, v, lights, objects, bgnd); // возвращяестяцветвданнойточке
}
}
Приложение 5
Листинг Surface.java
package objects;
import java.awt. Color;
import java.util. Vector;
/**