Алгоритмы получения реалистических изображений. Применение алгоритма обратной трассировки лучей, ее математическая основа. Составление матрицы и программная реализация. Формирование отраженного и преломленного луча. Модульная структура программы.
При низкой оригинальности работы "Реализация алгоритма обратной трассировки лучей для моделей с большим числом полигонов", Вы можете повысить уникальность этой работы до 80-100%
В компьютерной графике на сегодняшний день большое внимание уделяется алгоритмам получения реалистических изображений. Обусловлено это тем, что они должны предусматривать множество физических явлений, таких как преломление, отражение, рассеивание света. Профессиональные программы для кинематографа учитывают еще больше явлений (дифракцию, интерференцию, зависимость коэффициентов преломления, отражения, поглощения от длины волны падающего света, вторичное, третичное отражение света). В моей курсовой работе для рендеринга применяется алгоритм обратной трассировки. Применяется так же алгоритм z-буфера.Главным алгоритмом, используемым в программе для удаления невидимых граней, а так же моделирования эффектов преломления и отражения, является алгоритм обратной трассировки лучей. Этот алгоритм позволил мне добиться максимальной реалистичности изображения. Алгоритм можно быстро модернизировать, добавив в него обработку новых световых явлений. Алгоритм позволяет строить качественные тени с учетом большого числа источников света. Другие алгоритмы не позволяют так просто и качественно строить тени.Сцена представляется набором объектов двух типов: источников света и собственно объектов, которые необходимо визуализировать.Источники света не имеют никаких геометрических размеров, они являются точечными и не рисуются при рендеринге. Информация об источниках света хранится в массиве Svet. В i-ом элементе массива хранится информация об i-ом источнике света. Элемент массива представляет собой запись: TLIGHT=record tip: integer; Если оно равно 2, то источник светит внутри конуса, направляющая которого DIRX, DIRY, DIRZ, а угол при вершине равен 2*Lim.В моей курсовой в качестве полигонов выбраны треугольники, так как при этом значительно упрощается текстурирование, сглаживание и процедура пересечения луча с треугольником. Объекты состоят из треугольников. Информация об одном объекте хранится в трех массивах: Objects (массив объектов), Vse (массив треугольников), Toch (массив точек). Элемент массива представляет собой запись: TOBJ=record Они указывают, что треугольники с номером, большим или равным STARTG и меньшим или равным ENDG, принадлежат данному объекту.Для каждой текстуры хранятся ее размеры (lx, ly) и указатель на область памяти, куда загружена текстура (PT).Методы трассировки лучей на сегодняшний день считаются наиболее мощными методами создания реалистических изображений. Часть этих лучей улетит в свободное пространство, а часть попадет на объекты. На них лучи могут преломиться, отразится. Далее эти лучи опять же преломятся и отразятся и образуют новое поколение лучей. В этом методе отслеживаются лучи не от источников, а из камеры.Координаты всех объектов сцены определены в некой глобальной системе координат (в том числе и камеры). После формирования первичного луча создадим подсистему, у которой центр совпадает с точкой выхода луча и ось OZ направлена по лучу. Если необходимо построить вторичный луч, создаем еще одну систему координат, связанную с вторичным лучом, и считаем матрицу для перехода из 2 системы в 3.Составление матрицы преобразования из текущей системы координат в систему координат, центр которой находится в точке (x, y, z) и ось OZ которой направлена по (dx, dy, dz). Для такого преобразования необходимо: совершить сдвиг в точку (x, y, z) совершить поворот вокруг OZ совершить поворот вокруг OXВо многих функциях и процедурах в программе в качестве входных и выходных параметров выступают матрицы. Процедура умножает матрицу M1 на матрицу M2 и помещает результат в Res. Создает матрицу перехода из текущей системы координат в систему координат, сдвинутую по оси OZ на z. Процедура перемещает систему координат, задаваемую матрицей M, по оси OZ на z. Создает матрицу перехода из текущей системы координат в систему координат, находящуюся в точке (x,y,z), ось OZ которой направлена по вектору (dx,dy,dz).Преобразуем все вершины треугольника в локальную систему координат, связанную с лучом. Луч в этой системе координат имеет координаты (0, 0,1). Необходимо определить, лежит ли точка (0, 0) внутри треугольника в проекции на плоскость OXY. Преобразуем координату x вершин треугольника в локальную систему координат. Если нет, то: Преобразуем координату у вершин треугольника в локальную систему координат.Обозначим отраженный луч через R, вектор, направленный против падающего луча - S, вектор нормали - N. Рассмотрим единичные векторы этих векторов R1, S1, N1. Так как все три вектора находятся в одной плоскости, то можно записать R1 S1=N’.Обозначим преломленный луч, имеющий единичную длину, через T1. А вектор, направленный противоположно падающему лучу - через S1. Разложим вектор S1 на Найдем вектор NT. Этот вектор противоположен по направлению вектору нормали, а длина его равнаВ алгоритме трассировки лучей от 70 до 90 процентов временных затрат занимает процедура определения пересечений луча с объектами сцены. Если перебирать все объекты сцены, то время будет пропорционально Cn, где С - количество пикселей, а n - число объекто
План
Оглавление
1. Введение
2. Конструкторская часть
2.1 Обоснование использованных алгоритмов
2.2 Структура данных
2.2.1 Источники света
2.2.2 Объекты для визуализации
2.2.3 Текстуры
2.3 Алгоритм обратной трассировки лучей
2.3.1 Описание алгоритма
2.3.2 Математическая основа обратной трассировки лучей
2.3.3 Составление матрицы
2.3.4 Программная реализация
2.3.5 Определение пересечения луча с треугольником
2.3.4 Формирование отраженного луча
2.3.5 Формирование преломленного луча
2.4 Оболочки
2.4.1 Алгоритм построения иерархических оболочек
2.4.2 Алгоритм обхода оболочек в трассировке лучей
2.5 Текстурирование
2.5.1. Процедуры для работы с текстурами
2.5.2. Собственно текстурирование
2.6 Закраска Фонга
2.7 Освещение
2.7.1. Модель освещения Уиттеда
2.7.2 Диффузное отражение
2.7.3 Зеркальное отражение
2.7.4 Фоновая освещенность
2.7.5 Прозрачность
2.7.6 Процедуры расчета освещенности
3. Технологическая часть
3.1 Выбор языка программирования и обоснование выбора
3.2 Модульная структура программы
3.3 Интерфейс программы
4. Экспериментально-исследовательская часть
Тест № 1
Тест № 2
Тест № 3
Заключение
Список литературы
Введение
В компьютерной графике на сегодняшний день большое внимание уделяется алгоритмам получения реалистических изображений. Эти алгоритмы являются самыми затратными по времени. Обусловлено это тем, что они должны предусматривать множество физических явлений, таких как преломление, отражение, рассеивание света. Профессиональные программы для кинематографа учитывают еще больше явлений (дифракцию, интерференцию, зависимость коэффициентов преломления, отражения, поглощения от длины волны падающего света, вторичное, третичное отражение света).
В моей курсовой работе для рендеринга применяется алгоритм обратной трассировки. На сегодняшний день он считается одним из лучших для формирования реалистических изображений. Его используют большинство трехмерных графических редакторов. Применяется так же алгоритм z-буфера. Но эффекты отражения и преломления, там достигаются искусственными методами и считаются не совсем точно. Подобным методом пользуются в программах, где крайне важна скорость. Примером таких программ служат компьютерные игры. Почти все они построены на использовании алгоритма z-буфера.
Целью моей курсовой было так же сделать алгоритм обратной трассировки как можно более быстрым. Для этого я применил метод иерархических оболочек. Его применение позволяет сделать время рендеринга, пропорциональным логарифму от числа объектов, а не числу объектов. Добиться с помощью этого реального времени, конечно, не удастся, но делает время ожидания приемлемым, равным порядка 5-30 секунд для 30000 треугольников на сцене.
Модуль Engine программы, может быть использован отдельно, в других программах Delphi. С помощью всего нескольких функций пользователь сможет задать сцену любой сложности и произвести рендеринг сцены. Модуль содержит функции для: управления камерой управления источниками света задания объектов на сцене. поворота объектов рендеринга сцены вывода изображения в задаваемое окно
По использованию модуль Engine очень похож на модуль OPENGL.
Вы можете ЗАГРУЗИТЬ и ПОВЫСИТЬ уникальность своей работы