- •Введение
- •1. Исходные данные на проектирование
- •2. Выбор решения
- •2.1. Определение модулей программы
- •2.2. Создание и редактирование модели заданного объекта средствами Blender
- •3. Библиотека OpenGl
- •4. Схема программы
- •4.1. Схема работы приложения
- •Инициализация программы void Init() Опрос клавиатуры и мыши Пользователь хочет закрыть окно? Конец Вывод кадра void Main()
- •Init() – установка начального освещения, позиции камеры, загрузки модели
- •5.2. Функциональная структура программы
- •Заключение
- •Литература
- •Приложения Приложение 1. Листинг программы
- •Приложение 2. Скриншоты работающей программы
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 кадров в секунду).
Удалось реализовать всё, что задумывалось. Так как запросы на начальном этапе были небольшими, основной целью я выбрал реализацию алгоритма загрузки модели и её освещения. Для крышки и пузырьков сделана анимация.
