Список модулей:
TTex.h - описание структуры TTex
TSurfTex.h - описание структур TPlaneTex и TEllipsoidTex
TPoint.h - описание структур TPoint2d и TPoint3d
TRGBColor.h - описание страктуры TRGBColor
TLamp.h - описание класса TLamp
TCam.h - описание класса TCam
TPrimitive.h - описание класса TPrimitive
TFrstSurface.h - описание класса TFrstSurface
TScndSurface.h - описание класса TScndSurface
TTriangle.h - описание класса TTriangle
TEllipsoid.h - описание класса TEllipsoid
TParaboloid.h - описание класса TParaboloid
TScene.h - описание класса TScene
TTracer.h - описание класса TTracer
Модули реализующие, интерфейс программы:
_AboutUnit.h - модуль формы «О программе»
_ZoomUnit.h - модуль формы «Лупа»
_Options.h - модуль формы «Опции»
_ExtraGlassOptions.h - модуль формы «Свойства стекла»
_ExtraTableOptions.h - модуль формы «Свойства стола»
_ExtraCamOptions.h - модуль формы «Свойства камеры»
_MainUnit.h - модуль главной формы программы
Рис. 2.3.1. Схема связей между модулями программы.
Рис.2.3.2. Схема наследования примитивов
Краткое описание структур и классов программы
struct TPoint3d – структура, описывающая точку в мировой системе координат
struct TPoint2d – структура, описывающая точку на плоскости (в текстуре) с целочисленными координатами
struct TRGBColor – структура, описывающая цвет по трем составляющим (RGB)
struct TTex – структура, описывающая текстуру – содержит адрес массива пикселей и его размеры
struct TPlaneTex – структура, описывающая привязку текстуры к плоскости.
Содержит три точки, к которым привязывается текстура
class TLamp – класс, описывающий источник освещения.
Содержит объект TPoint3d coord с координатами источника и три переменные типа float (Ir, Ig, Ib) для хранения интенсивности трех компонент света.
class TCam – класс, описывающий камеру.
Содержит два угла (a, b), указывающих направление зрения камеры, точку, на которую направлена камера (viewP) и расстояние от камеры до этой точки (r).
class TPrimitive – абстрактный класс примитива. От него наследуются поверхности первого и второго порядка.
class TFrstSurface – абстрактный класс поверхности первого порядка. От него наследуется класс треугольника.
class TScndSurface – абстрактный класс поверхности второго порядка. От него наследуются классы эллипсоида и параболоида.
class TTriangle – класс треугольника. Содержит три вершины треугольника и его нормаль
class TParaboloid – класс параболоида.
class TEllipsoid – класс эллипсоида.
class TScene – класс сцены. Содержит информацию о всех примитивах, источниках и камере.
class TTracer – класс, отвечающий за построения изображения. Содержит буфер (buffer) разметом 400x400 пикселей, в котором формируется изображение сцены. Перед генерацией необходимо вызвать функцию
selectScene передав ей в качестве параметра указатель на сцену, которуюнеобходимо сгенерировать. Для генерации вызвать функцию render.
Все классы – потомки TPrimitive предоставляют следующие функции:
float getT(TPoint3d p0, TPoint3d viewDir) – возвращает расстояние от точки начала(p0) луча viewDir до ближайшей точки пересечения с примитивом void getTArr(float* arr, int& n, TPoint3d p0, TPoint3d viewDir) – заполняет массив arr расстояниями от точки начала(p0) луча viewDir до ближайшей всех точек пересечения с примитивом void getNormal(TPoint3d& n, const TPoint3d& p) – возвращает координаты вектора нормали к примитиву в точке p void getColor(TRGBColor& c, const TPoint3d& p) - возвращает цвет примитива точке p (с учетом текстуры).
Технологическая часть
Выбор языка программирования
При разработке программы был использован язык программирования высокого уровня C++ в составе среды визуального программирования CBuilder6.
Данный язык был выбран благодаря тому, что он предоставляет максимально удобные средства по работе с оперативной памятью, позволяет реализовывать алгоритмы более эффективно, по сравнению с другими высокоуровневыми языками. Программы, написанные на C++, работают быстрее и занимают меньше места на диске.
Кроме того, среда визуального программирования CBuilder6 предоставляет большое количество стандартных визуальных компонентов для создания интерфейса, и ряд библиотек с различными часто используемыми полезными функциями.
Дата: 2019-07-24, просмотров: 237.