Структура классов программы




В силу того, что при написании программы использовалась технология объектно-ориентированного программирования, особое внимание при рассмотрении ее структуры должно быть уделено структуре ее классов. В программе классы созданы для различных целей: для представления математических абстракций (точка, вектор, плоскость, луч, примитив), описания примитивов и объектов (сфера, кольцо, поверхность), задания свойств объектов (источник света, поверхность), отрисовки и инициализации объектов сцены (сцена, прорисовка):

· Class vector3 – математическая абстракция точки в трёхмерном пространстве (а также вектора с тремя координатами, которым удобно задавать интенсивность и цвет луча или точки поверхности). Содержит всевозможные переопределения операторов для класса vector3, а также методы по заданию и считыванию координат, нахождению длины вектора, а также скалярного произведения векторов;

· Class plane – математическая абстракция плоскости, содержит метод по заданию плоскости на основе нормали;

· Class surface – класс-абстракция для работы с пиксельным изображением;

· Class Ray – математическая абстракция луча. Содержит поля, определяющие точку, из которой исходит луч, и его направление. Методы служат для задания и считатывания начальной точки и направления луч;

· Class Material – класс, отвечающий за все возможные свойства поверхности объекта: цвет, составляющие отражения и т.д. Содержит различные методы по заданию и получению свойств, а также по заданию и распределению текстуры по поверхности;

· Class Primitive – математическая абстракция примитива. В программе используются три вида примитивов, это сфера, кольцо и плоскость. Поля класса отвечают за уникальное название примитива; за материал, из которого он сделан; за то, является ли примитив источником света и за луч, который пересекается с примитивом. Методы класса по большей части объявлены как виртуальные, т.к. впоследствии переопределяются для каждого класса-наследника, отвечающего за определённый тип примитива. Также в классе предусмотрены методы проверки на соответствие примитива источнику света, задания и считывания материала имени примитива, получения последнего пересечения с лучом и преобразования примитива в источник света;

· Class Sphere – наследник класса primitive, отвечающий за примитив сферу. Сфера задаётся параметрически, при помощи задания центра и радиуса. Предусмотрены методы получения цвета, подсчёта нормали, считывания радиуса и проверки на пересечение луча со сферой;

· Class PlanePrim - наследник класса primitive, отвечающий за примитив плоскость. Плоскость задаётся параметрически при помощи двух пересекающихся векторов. Предусмотрены методы получения цвета, подсчёта нормали и проверки на пересечение луча с плоскостью;

· Class Ring - наследник класса primitive, отвечающий за примитив кольцо. Кольцо обладает рядом свойств, задающих его параметры – плоскость кольца (плоскость задаётся двумя векторами), толщина кольца (задаётся двумя радиусами) и центр кольца, от которого берутся радиусы. Предусмотрены методы получения цвета, подсчёта нормали и проверки на пересечение луча с кольцом;

· Class Scene – класс, отвечающий за инициализацию объектов сцены. Содержит массив примитивов, и их контрольную сумму. Методы класса служат для получения количества примитивов, инициализации сцены и получения указателя на примитив,попавший в данный участок разбиения;

· Class Engine – опорный класс, отвечающий за разбиение сцены на абстрактные участки, запуск алгоритма обратной трассировки лучей и отрисовку объектов сцены. Поля класса содержат данные для отрисовщика, сцену, модель наблюдателя, экрана, и его параметры. Методы служат для получения сцены, запуска и отслеживания состояния алгоритма обратной трассировки, инициализации и получения буферизованного изображения.

Таким образом, дерево классов программы представляет собой иерархическую структуру, с реализацией наследования.

Выводы:

Разработанная программа позволяет получать на экране растрового дисплея реалистичное изображение сцены, представляющей из себя увеличенную модель атома лития. Результат работы программы можно увидеть в приложении 1. Благодаря алгоритму обратной трассировки лучей и глобальной модели освещенности Уиттеда, удалось добиться высокой реалистичности полученного изображения. Листинг программы можно увидеть в приложении 2.

По результатам работы программы были сделаны выводы:

· Алгоритм обратной трассировки лучей обеспечивает высокую степень реалистичности изображения, при невысокой скорости выполнения;

· Без дополнительной оптимизации увеличение числа объектов сцены ведет к значительному увеличению времени построения;

· При существующем движке трассировки лучей сцена создается и дополняется новыми объектами достаточно просто.


 

Список использованной литературы

1. Роджерс Д. Алгоритмические основы машинной графики / Пер. с англ. –М.:Мир, 1989. – 512 с.,ил.

2. Авдеева С.М., Куров А.В. Алгоритмы трехмерной машинной графики: учебное пособие. – М.: Издательство МГТУ им. Н.Э.Баумана, 1996. – 60 с., ил.

3. Шикин Е.В., Боресков А.В. Компьютерная графика. Динамика, реалистические изображения. – М.: Диалог-МИФИ, 1995. – 288 с.

4. Владимир Фролов, Александр Фролов. Тени. URL: https://ray-tracing.ru


 

Приложения



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-08-20 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: