Курсовая работа: Построение трехмерной модели вазы
Процедура составления полигонов выполняет преобразования координат в экранные, составление полигонов из массива точек и сортировку полученных полигонов в Z буфере с учётом их расположения по глубине сцены.
Блок вращения меняет значения углов обзора в соответствии с нажатиями на клавиши позиционирования и вызывает процедуру отрисовки.
3.2 Введенные типы данных и их предназначение
При реализации программы были определены некоторые специализированные типы данных (таблица 1).
Таблица 1 - Типы данных.
Тип | Значение | Предназначение |
T3DPoint | record | Содержит 3 координаты точки в трехмерном пространстве, координаты точки на экране, номер точки и нормаль к этой точке имеющая три координаты. |
TPolygon | record | Содержит указатели на вершины полигона, то есть содержит переменные типа P3DPoint. нормаль к полигону, номер полигона, цвет и среднюю точку. |
3.3 Введенные основные переменные и их предназначение
При реализации программы были определены некоторые переменные (таблица 2).
Таблица 1 - Переменные
Переменная | Значение | Предназначение |
w,v1 | array [1.. nPoint] of T3DPoint | мировые, видовые координаты вершин |
v | array [1.. nPoint] of TPoint | экранные координаты точек |
polygons | array [1.. nTPolygon] of TPolygon | массив объектов фигуры |
teta | extended | Отвечает за угол поворота относительно оси Y. Имеет фиксированное значение teta:=pi/9. |
phi | extended | Отвечает за угол поворота относительно оси X. Имеет фиксированное значение phi:=pi*4/3. |
buf | TBitmap | Вспомогательная поверхность в ней создается движение сферы |
blink_buf | TBitmap | Вспомогательная поверхность для быстрого закрашивания фоном (хранит в себе фон изображения) |
A, B, C, D | переменные типа word типа TPolygon (record) | Определяют номера вершин четырехугольника в полигоне. Диапазон значений - 0.. nTPolygon |
ro | real | Определяет расстояние от объекта наблюдения до фигуры. Имеет фиксированное значение |
3.4 Текстовое описание основных процедур и функций и их блок-схемы
Процедура FormCreate
Задаются углы поворота, радиусы паралеллей, их количество и высота вазы. Вычисляются видовые координаты вершин вазы (пересечения параллелей и меридианов). Рассчитывается количество полигонов. Создаётся фон типа TBitmap, на котором будет рисоваться фигура (рисунок 4).
Процедура FormKeyDown
В этой процедуре отслеживаются нажатые клавиши с последующим выполнений соответствующих команд.
При помощи процедуры KeyDown задается угол поворота объекта. При нажатии клавиш Up, Down, Left, Right объект поворачивается в заданном направлении (рисунок 5).
Рисунок 5 – Блок-схема процедуры FormKeyDown
Процедура Sort
Для каждого полигона высчитывается вектор нормали и приводится к единичной форме; сортировка массива полигонов по минимальным значениям средних координат (рисунок6).
Рисунок 6 – Блок-схема процедуры Sort
Процедура ViewTransformation
В этой процедуре вычисляются видовые и экранные координаты точек, задаются полигоны. В процедуре мировые координаты переводятся в видовые, в свою очередь которые преобразовываются в экранные координаты точек (рисунок7).
Рисунок 7 – Блок-схема процедуры ViewTransformation
Процедура Draw
Поочередная прорисовка полигонов, то есть который грань дальше от нас прорисовывается первой и т.д (рисунок 8).
Рисунок 8 – Блок-схема процедуры Draw