Курсовая работа: Отрисовка сцены "Отражающиеся дорожки" алгоритмом обратной трассировки лучей
listOfObjects.addElement (new Sphere (currentSurface, new WorkVector((float) 20, (float) 0, (float) – 40), (float) 15));
eye = new WorkVector (5, 0, 40); // координаты точки обзора
lookat = new WorkVector (0, 0, 0); // координаты точки направления взгляда
up = new WorkVector (0, 1, 0); // вектор указывающий верх
Graphics g = frame.getGraphics();
WorkVector Eye, Du, Dv, Vp;
WorkVector look = new WorkVector (lookat.x – eye.x, lookat.y – eye.y, lookat.z – eye.z);
float fl = (float) (width / (2*Math.tan((0.5*angle)*Math.PI/180)));
Eye = eye;
Du = WorkVector.normalize (look.cross(up)); // вектор являющийся вспомогательным вектором для рендера «по оси х»
Dv = WorkVector.normalize (look.cross(Du)); // вектор являющийся вспомогательным вектором для рендера «по оси y»
Vp = WorkVector.normalize(look); // вектор являющийся вспомогательным вектором для рендера «по оси z»
Vp = (Vp.mul(fl)).sub((((Du.mul(width)).add (Dv.mul(height))).mul (0.5f)));
for (int j = 0; j < height; j++) {
for (int i = 0; i < width; i++) {
WorkVector dir = new WorkVector(((Du.mul(i)).add (Dv.mul(j)).add(Vp))); // заданиеточкиначалалуча
Ray ray = new Ray (Eye, dir); // задание вектора направления луча
if (ray.trace(listOfObjects)) { // если было найдено пересечение с обектом
gc.setColor (ray. Shade (listOfLights, listOfObjects, background)); // то точка получает расчитываемый цвет
} else {
gc.setColor(background); // Если не было пересечения с обьектами то точка имеет цвет фона
}
gc.drawLine (i, j, i, j); // рисование точки на буферном изображении
}
}
g.drawImage (screen, 0, 0, frame); // отрисовка всего изображения на экране
}
}