Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПЗ2-v004.docx
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
609.7 Кб
Скачать

5.2. Функциональная структура программы

Программа состоит из трёх функциональных элементов:1) инициализация программы; 2) вывод (рендеринг) одного кадра; 3) обработка ввода клавиатуры и мыши.

Сначала выполняется инициализация (настраивается окно OpenGL, устанавливается освещение, загружаются модели «меши». «Меш» - это набор вершин и полигонов, определяющих форму модели обьекта). Затем программа входит в бесконечный цикл обработки сообщений, выход из которого осуществляется закрытием окна. Здесь и используется функциональный элемент использования программы.

При обработке сообщений по очереди вызывается второй и третий функциональный элемент программы.

В программе используются следующие блоки: блок OpenGl (gl.h, glu.h), блок определения класса CApp и связанных с ними функций app.h, блок загрузки текстур (изображений) image.h, блок вывода логотипа приложения log.h, блок подсчёта времени timer.h, блок для создания окна window.h

Используются структуры Vector2 (для хранения двухмерных координат текстуры) и Vector3 (для хранения трёхмерных координат вершин модели). Для хранения индексов вершин граней используем структуру SObjFace. Для загрузки файла модели .obj используем класс CObj. В этом классе мы реализуем следующие процедуры:

//Загрузка модели и текстуры

bool Load(const char * szFilename, char *szTexName);

//Установка текстуры для всех частиц

void PartBind();

//Рендеринг частиц

void RenderPart();

//Рендеринг обычной модели

void Render();

//Установить другую текстуру для модели

void SetSkin(CImage& rSkin);

Процедуры PartBind и RenderPart используются для вывода пузырьков. Остальные процедуры используются для вывода модели.

Для обработки движения мыши используется функция IN_MouseMove.

Для обработки нажатия и отпускания кнопок клавиатуры используется Key_Event, а для кнопок мыши IN_MouseEvent.

Для вывода кадра используется функция Main (Main game loop), она выводит один кадр программы.

Для инициализации OpenGl и загрузки моделей используется функция Init.

Функция WinMain используется как точка входа в программу. В ней инициализируется обычное окно Windows.

В результате выполнения данного курсового проекта были реализованы следующие действия:

Спроектирована 3D твердотельная модель требуемой фигуры средствами 3D Max с последующим подбором и наложением соответствующих текстур.

Импортированы полученные 3D модели объекта и ландшафта в программную среду Visual С++ 2010 средствами Deep Exploration.

С помощью функций OpenGL синтезированы 3D объект, ландшафт, наложены текстуры, добавлены три точечных источника освещения и камера, визуализирована 3D сцена.

Реализовано пользовательское управление движением камеры вокруг 3D объекта, в том числе и удаление (приближение) камеры, посредством клавиатуры.

Заключение

При выполнении данной курсовой работы были получены навыки работы с библиотекой OpenGl. Были освоены приемы создания трёхмерного окна любого заданного разрешения (вплоть до Full HD 1920х1080), изучены способы создания и загрузки obj моделей, способы обработки событий от клавиатуры и мыши. Усвоены механизмы реализации освещения, текстурирования, добавления прозрачностей. Изучены функции работы с файлами. Получены базовые навыки программирования на языке C++. Изучены основные возможности среды программирования Visual Studio 2010. Получены навыки отладки и тестирования программ.

В рамках выполнения курсовой работы была написана программа, загружающяя 3d модели из obj файла, который, в отличие от других 3d форматов, содержит информацию о нормалях (перпендикулярах к вершинам моделей). Программа предоставляет небольшой, но достаточный для использования список возможностей. Управление камерой осуществляется при помощи клавиатуры (WASD) и движения мыши. Программа не требует больших системных ресурсов и обеспечивает вывод изображения в реальном времени (60 кадров в секунду).

Удалось реализовать всё, что задумывалось. Так как запросы на начальном этапе были небольшими, основной целью я выбрал реализацию алгоритма загрузки модели и её освещения. Для крышки и пузырьков сделана анимация.