Курсовая работа: Отрисовка сцены "Отражающиеся дорожки" алгоритмом обратной трассировки лучей

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); // отрисовка всего изображения на экране

}

}

К-во Просмотров: 323
Бесплатно скачать Курсовая работа: Отрисовка сцены "Отражающиеся дорожки" алгоритмом обратной трассировки лучей