ReferatWorld.ru
» » » Отрисовка сцены "Отражающиеся дорожки" алгоритмом обратной трассировки лучей
Вернуться назад

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

Курсовая работа

на тему:

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

Екатеринбург 2011 г.

Алгоритм работы программы

1) Заранее в программе заданы объекты и источники света, тип поверхности объектов, размеры окна для отображения изображения, цвет фона, а также координаты точки обзора;

2) Затем для каждого пикселя изображения рассчитываем цвет, для этого направляем лучи;

3) Если заданный луч не пересекает ни одного объекта сцены, то закрашиваем данный пиксель в цвет фона.

4) Если же заданный луч пересекает какой-либо объект сцены, то обращаемся к методу класса Ray рассчитывающему цвет в точке пересечения. Он в свою очередь обращается к аналогичному методу класса Sphere, который находит координаты точки пересечения луча с объектом, увеличивает длину луча (вектора) до точки пересечения с объектом, находит вектор нормали к поверхности в точке пересечения.

5) Программа передает все найденные выше параметры в метод класса Surface, который рассчитывает цвет в данной точке. В зависимости от свойств материала пересеченного объекта данный метод находит затененность, отражение, преломление в данной точке. При наличии двух последних генерируется новый луч, который трассируется (т.е. проходит заново пункты 3–5 данного алгоритма (рекурсия)). При трассировке этого луча мы получаем цвет в данной точке, который модифицируется при помощи коэффициентов и возвращается в главную функцию для последующей отрисовки.

Блок-схема программы

программа трассировка тень освещение

Заключение

В результате работы над программой были выполнены поставленные требования: реализована трассировка лучей с просчетом теней, освещения, отражения, преломления лучей, что является несомненным достоинством программы. Также задан объект – сфера. Недостатком программы считаю то, что не рассмотрены такие источники света, как свет окружающей среды и направленный свет.

Приложение 1

Полученное изображение

Приложение 2

Листинг Light.java

packageobjects;

/**

*

* @author Алексей

*/

// Источник света

public class Light {

public WorkVector lightvec; // позицияистоникасвета

public float lightred, lightgreen, lightblue; // цветисточникасвета

public Light (WorkVector v, float r, float g, float b) {

lightvec = v;

lightred = r;

lightgreen = g;

lightblue = b;

}

}

Приложение 3

Листинг Ray.java

package objects;

import java.awt. Color;

import java.util. Vector;

/**

*

* @author Алексей

*/

// Луч

public class Ray {

float max_distance = Float.MAX_VALUE; // максимальнаязначениедля currentDistance луча

WorkVector initRay; // началолуча

WorkVector finalRay; // направлениелуча

float currentDistance; // Текущее расстояние до обьекта

Sphere object; // Обьект, с которым произошло столкновение луча

public Ray (WorkVector eye, WorkVector dir) {

initRay = new WorkVector(eye);

finalRay = WorkVector.normalize(dir);

}

public boolean trace (Vector objects) {

currentDistance = max_distance;

object = null;

for (int i = 0; i < objects.size(); i++) {

Sphere object = (Sphere) objects.elementAt(i);

object.intersection(this); // проверка пересечения с объектом

}

return (object!= null); // возвращение true если было пересечение

}

public final Color Shade (Vector lights, Vector objects, Color bgnd) {

return object. Shade (this, lights, objects, bgnd);

}

}

Приложение 4

Листинг Sphere.java

package objects;

import java.awt. Color;

import java.util. Vector;

/**

*

* @author Алексей

*/

// Сфера

public class Sphere {

Surface surface; // типповерхности

WorkVector center; // положениесферы

float radius; // радиуссферы

public Sphere (Surface s, WorkVector c, float r) {

surface = s;

center = c;

radius = r;

}

public boolean intersection (Ray ray) { // поискпересечениясосферой

WorkVector dv = center.sub (ray.initRay);

float v = ray.finalRay.dot(dv);

if (v – radius > ray.currentDistance)

return false;

// нахождение суммы квадрата v и квадратов элементов вектора dv

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*r

Внимание, отключите Adblock

Вы посетили наш сайт со включенным блокировщиком рекламы!
Ссылка для скачивания станет доступной сразу после отключения Adblock!

Скачать
Курсовые работы по информатике и программированию Курсовая работа на тему: «Отрисовка сцены «Отражающиеся дорожки» алгоритмом обратной трассировки лучей» Екатеринбург 2011 г. Алгоритм работы
Оценок: 1000 (Средняя 5 из 5)

Одними из наиболее популярных услуг на рынке IT-технологий являются создание и продвижение лендингов. Они способны положительно влиять на деятельность любого бизнес-проекта в интернете. Судя по многочисленным отзывам, заказавшие создание лендингов люди ни разу не пожалели о потраченных деньгах. Они вложили в будущее, которое неразрывно связано с интернетом. Всё больше и больше предпринимателей обращаются к услугам разных агентств, веб-студий, чтобы заказать создание лендинга у профессионалов.

© 2017 - 2022 ReferatWorld.ru