Создание 3Д лабиринта

Заказать уникальную курсовую работу
Тип работы: Курсовая работа
Предмет: Компьютерные технологии
  • 2020 страниц
  • 14 + 14 источников
  • Добавлена 17.11.2020
800 руб.
  • Содержание
  • Часть работы
  • Список литературы
  • Вопросы/Ответы
ОГЛАВЛЕНИЕ
Оглавление 2
Введение 3
1. Аналитическая часть 4
1.1. OpenGL 4
1.2. Базовые возможности библиотеки 5
1.3. Сторонние библиотеки 6
1.4. Загрузка текстур 7
1.5. Лабиринт 8
1.6. Создание эффекта «туман» 10
2. Конструкторская часть 11
2.1. Создание окна 11
2.2. Загрузка текстур 14
2.3. Рисование плоскости 15
2.4. Построение лабиринта 16
2.5. Использование спецэффектов 18
Заключение 20
Список литературы 21

Фрагмент для ознакомления

В варианте SkyBox – текстура, полностью покрывает плоскость без разрывов. По сути это представляет собой куб внутри которого располагается наблюдатель. На грани каждой стороны, которой помещена текстура неба. Построение лабиринтаДля построения лабиринта, требуется определение препятствия. В качестве препятствия в лабиринте в трехмерном представлении использовался куб. Куб состоит из 6 граней, для того чтобы куб был более наглядным, каждая грань была покрашена в свой уникальный цвет. Для применения цвета к грани куба использовали функцию - glColor3f(1.0f, 1.0f, 0.0f); в данном случае, у нас равен единице первый и второй параметр, это означает, что активны цвета – красный и зеленый. Результатом смешения красного и зеленого цвета является желтый цвет. Координаты x и y необходимы для пространственного размещения куба.voidDrawCube(floatx, floaty){glBindTexture(GL_TEXTURE_2D, boxTexture);glBegin(GL_QUADS); // Рисуем куб у него 6 гранейglColor3f(1.0f, 1.0f, 0.0f ); // ЖелтыйglVertex3f(1.0f + x, 1.0f, -1.0f + y);glVertex3f(-1.0f + x, 1.0f, -1.0f + y);glVertex3f(-1.0f + x, 1.0f, 1.0f + y);glVertex3f(1.0f + x, 1.0f, 1.0f + y);glColor3f(1.0f, 0.5f, 0.0f); // оранжевыйglVertex3f(1.0f + x, -1.0f, 1.0f + y);glVertex3f(-1.0f + x, -1.0f, 1.0f + y);glVertex3f(-1.0f + x, -1.0f, -1.0f + y);glVertex3f(1.0f + x, -1.0f, -1.0f + y);glColor3f(1.0f, 0.0f, 0.0f); // КрасныйglVertex3f(1.0f + x, 1.0f, 1.0f + y);glVertex3f(-1.0f + x, 1.0f, 1.0f + y);glVertex3f(-1.0f + x, -1.0f, 1.0f + y);glVertex3f(1.0f + x, -1.0f, 1.0f + y);glColor3f(1.0f, 1.0f, 0.0f); // ЖелтыйglVertex3f(1.0f + x, -1.0f, -1.0f + y);glVertex3f(-1.0f + x, -1.0f, -1.0f + y);glVertex3f(-1.0f + x, 1.0f, -1.0f + y);glVertex3f(1.0f + x, 1.0f, -1.0f + y);glColor3f(0.0f, 0.0f, 1.0f); // СинийglVertex3f(-1.0f + x, 1.0f, 1.0f + y);glVertex3f(-1.0f + x, 1.0f, -1.0f + y);glVertex3f(-1.0f + x, -1.0f, -1.0f + y);glVertex3f(-1.0f + x, -1.0f, 1.0f + y);glColor3f(1.0f, 0.0f, 1.0f); // ФиолетовыйglVertex3f(1.0f + x, 1.0f, -1.0f + y);glVertex3f(1.0f + x, 1.0f, 1.0f + y);glVertex3f(1.0f + x, -1.0f, 1.0f + y);glVertex3f(1.0f + x, -1.0f, -1.0f + y);glColor3f(1.0f, 1.0f, 1.0f);glEnd(); }Листинг 4.Построение кубаПосле определения минимального элемента куба, требуется перебрать все элементы массива, который определяет лабиринт. Если элемент массива содержит значение 1, то это означает, что на данном месте находится препятствие, если же равно 0 то данный элемент означает, что в данном месте есть проход. Пример программного кода иллюстрирующий представление лабиринта на языке программирования С++. intLabyrint[10][10] = {{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },{ 1, 0, 1, 0, 1, 1, 0, 1, 0, 0 },{ 1, 0, 0, 0, 1, 0, 0, 0, 0, 1 },{ 1, 1, 0, 1, 1, 1, 1, 0, 1, 1 },{ 1, 0, 0, 1, 0, 0, 0, 0, 0, 1 },{ 1, 0, 1, 1, 1, 1, 1, 0, 1, 1 },{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 1 },{ 1, 0, 1, 1, 0, 1, 0, 1, 1, 1 },{ 0, 0, 1, 1, 0, 1, 0, 0, 0, 1 },{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }};Листинг 5.Лабиринт представленный в виде двухмерного массиваДля отображения лабиринта была написана функция DrawLabyrintкоторая реализует обход лабиринта и на соответствующие позиции размещает куб. voidDrawLabirint(){for (int j = 0; j < 10; j++)for (inti = 0; i < 10; i++){if (Labyrint[i][j] == 1)DrawCube(2 * i, 2 * j);}}Листинг 6.Функция рисования лабиринта.Использование спецэффектовВ игровых приложениях часто для большей реалистичности используются различные спецэффекты. В Курсовой работе рассмотрели построение двух спецэффектов - это туман, и фонтан. Моделирование тумана является одной из самых простых задач, ввиду того что для моделирования требуется только инициализация данного процесса, для большей интерактивности создается управление данным процессом с помощью клавиатуры. Для подключения эффекта используется функция - glEnable(GL_FOG);В OpenGLреализован различный тип тумана, поэтому нужно указывать тип тумана, цвет. Туман может быть различным по степени густоты – данная возможность управляется с помощью функции glFogf(GL_FOG_DENSITY, 0.009f);Расстояние на котором распространяется туман указывается с помощью функции:glFogf(GL_FOG_START, 0.0f); - начальное местоположение от камеры, с которого начинает действовать туман.glFogf(GL_FOG_END, 100.0f); - расстояние на котором действие тумана заканчивается. Указание конкретных расстоянии, нужно для получения различных эффектов и оптимизации расчетов при выводе графического изображения.//-----------------------------Настройки тумана----------------------------------------------------glEnable(GL_FOG); // Включает туман (GL_FOG)glFogi(GL_FOG_MODE, fogMode[fogfilter]);// Выбираем тип туманаglFogfv(GL_FOG_COLOR, fogColor); // Устанавливаем цвет туманаglFogf(GL_FOG_DENSITY, 0.009f); // Насколько густым будет туманglHint(GL_FOG_HINT, GL_DONT_CARE); // Вспомогательная установка туманаglFogf(GL_FOG_START, 0.0f); // Глубина, с которой начинается туманglFogf(GL_FOG_END, 100.0f); // Глубина, где туман заканчивается.Листинг 7.Функция рисования лабиринта.Создание сложных спецэффектов таких как: огонь, движение воды, взрывтребует нестандартного подхода. Данные явления моделируется с помощью системы частиц. По своей сути это можно представить как большое количество объемных точек или очень маленьких сфер, которые движутся в соответствии с определенным законом, которыми их наделяет разработчик. К примеру, для моделирования огня, требуется задать движение частиц и изменять цвет в пространстве, в зависимости от местонахождения. Чем ближе частицы к горячей части, они должны окрашиваться в ярко красный цвет, дальше от центра изменяется на синий цвет. Переходы должны быть. Для моделирования фонтана требуется, создать поток частиц, который движется вверх, и под действием сил гравитации обратно устремляется вниз. Первой задачей для осуществления данной операции, описываем частицу. Частица определяется следующими понятиямиэто – активность, жизнь, скорость угасания, цвет, текущее положение в пространстве, направление движение, и воздействия силы гравитации. typedefstruct// Структура частицы{boolactive; // Активность (Да/нет)floatlife; // Жизньfloatfade; // Скорость угасанияfloatr; // Красное значениеfloatg; // Зеленное значениеfloatb; // Синие значениеfloatx; // X позицияfloaty; // Y позицияfloatz; // Z позицияfloatxi; // X направлениеfloatyi; // Y направлениеfloatzi; // Z направлениеfloatxg; // X гравитацияfloatyg; // Y гравитацияfloatzg; // Z гравитация}particles;Листинг 8.Представление частицы.При моделировании системы частиц также требуется задания начальных значении месторасположения частиц. Изначально они могут находиться ниже уровни плоскости которая имитирует поверхность, а дальше они устремляются вверх до тех пор пока скорость не уменьшиться под влиянием гравитации. ЗАключениеВ процессе изучения библиотеки OpenGLи создания курсового проекта была получена практическая реализация приложения «Лабиринт», реализованы спецэффекты представляющие собой: «Туман» и «Фонтан».В курсовой работе исследованабиблиотека OpenGL и был получен практический опыт в реализации трехмерных сцен. Сложность построения объемных сцен представляет сложность в плане развития пространственного мышления и физического моделирования. Соответственно цели курсовой работы были достигнуты - получено работоспособное приложение,а также изучены следующие вопросы:Программирование графики в среде VisualStudioC++.Принципы создания приложения использующую трехмерную графику.Использование функции OpenGL.Моделирование спецэффектов.Создание управления сценой с помощью клавиатуры.Список литературы1. Боресков Расширения OpenGL (+ CD-ROM) / Боресков. - М.: БХВ-Петербург, 2014. - 925 c.2. Вельшенбах, М. Криптография на Си и С++ в действии. Учебное пособие / М. Вельшенбах. - М.: Триумф, 2014. - 462 c.3. Глория, Буэно Гарсия Обработка изображений с помощью OpenCV / Глория Буэно Гарсия и др. - М.: ДМК Пресс, 2016. - 210 c.4. Горнаков, С. DirectX 9. Уроки программирования на C++ / С. Горнаков. - М.: БХВ-Петербург, 2010. - 400 c.5. Горнаков, Станислав Инструментальные средства программирования и отладки шейдеров в DirectX и OpenGL / Станислав Горнаков. - М.: БХВ-Петербург, 2017.- 215 c.6. Девис, Т. OpenGL. Руководство по программированию / Т. Девис, Д. Шрайнер, Дж. Нейдер, и др.. - М.: СПб: Питер, 2010. - 624 c.7. Дейтел, Х.М. Как программировать на С++ / Х.М. Дейтел, П.Дж. Дейтел. - М.: Бином; Издание 4-е, 2012. - 801 c.8. Карпов, Б. C++: специальный справочник / Б. Карпов, Т. Баранова. - М.: СПб: Питер, 2016. - 480 c.9. Крупник, Александр Самоучитель С++ / Александр Крупник. - М.: Питер, 2017. - 256 c.10. Культин, Н. C/C++ в задачах и примерах / Н. Культин. - М.: БХВ-Петербург, 2014. - 860 c.11. Лоудон, К. C++. Карманный справочник / К. Лоудон. - М.: Питер, 2017. - 224 c.12. Миллер, Том ManagedDirectX 9 с управляемым кодом. Программирование игр и графика (+ CD-ROM) / Том Миллер. - М.: КомБук, 2016. - 400 c.13. Панюкова, Т. А. Языки и методы программирования. Путеводитель по языку С++ / Т.А. Панюкова, А.В. Панюков. - М.: Либроком, 2015. - 216 c.14. Поляков, Алексей Программирование графики: GDI+ и DirectX (+ CD-ROM) / Алексей Поляков , Виталий Брусенцев. - М.: БХВ-  М.: БХВ-Петербург, 2010. - 360 c.

СПИСОК ЛИТЕРАТУРЫ


1. Боресков Расширения OpenGL (+ CD-ROM) / Боресков. - М.: БХВ-Петербург, 2014. - 925 c.
2. Вельшенбах, М. Криптография на Си и С++ в действии. Учебное пособие / М. Вельшенбах. - М.: Триумф, 2014. - 462 c.
3. Глория, Буэно Гарсия Обработка изображений с помощью OpenCV / Глория Буэно Гарсия и др. - М.: ДМК Пресс, 2016. - 210 c.
4. Горнаков, С. DirectX 9. Уроки программирования на C++ / С. Горнаков. - М.: БХВ-Петербург, 2010. - 400 c.
5. Горнаков, Станислав Инструментальные средства программирования и отладки шейдеров в DirectX и OpenGL / Станислав Горнаков. - М.: БХВ-Петербург, 2017. - 215 c.
6. Девис, Т. OpenGL. Руководство по программированию / Т. Девис, Д. Шрайнер, Дж. Нейдер, и др.. - М.: СПб: Питер, 2010. - 624 c.
7. Дейтел, Х.М. Как программировать на С++ / Х.М. Дейтел, П.Дж. Дейтел. - М.: Бином; Издание 4-е, 2012. - 801 c.
8. Карпов, Б. C++: специальный справочник / Б. Карпов, Т. Баранова. - М.: СПб: Питер, 2016. - 480 c.
9. Крупник, Александр Самоучитель С++ / Александр Крупник. - М.: Питер, 2017. - 256 c.
10. Культин, Н. C/C++ в задачах и примерах / Н. Культин. - М.: БХВ-Петербург, 2014. - 860 c.
11. Лоудон, К. C++. Карманный справочник / К. Лоудон. - М.: Питер, 2017. - 224 c.
12. Миллер, Том Managed DirectX 9 с управляемым кодом. Программирование игр и графика (+ CD-ROM) / Том Миллер. - М.: КомБук, 2016. - 400 c.
13. Панюкова, Т. А. Языки и методы программирования. Путеводитель по языку С++ / Т.А. Панюкова, А.В. Панюков. - М.: Либроком, 2015. - 216 c.
14. Поляков, Алексей Программирование графики: GDI+ и DirectX (+ CD-ROM) / Алексей Поляков , Виталий Брусенцев. - М.: БХВ- М.: БХВ-Петербург, 2010. - 360 c.

Вопрос-ответ:

Какие возможности предоставляет библиотека OpenGL?

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

Какие сторонние библиотеки могут использоваться вместе с OpenGL?

С OpenGL можно использовать различные сторонние библиотеки для упрощения процесса разработки. Например, библиотеки для загрузки текстур, работы со звуком, создания пользовательского интерфейса и др. Такие библиотеки помогают ускорить разработку и добавить новые функциональные возможности.

Как происходит загрузка текстур в OpenGL?

Загрузка текстур в OpenGL происходит путем создания и настройки текстурного объекта, а затем привязки его к нужным геометрическим объектам. Для этого используются специальные функции библиотеки OpenGL, которые позволяют загружать текстуры из файлов различных форматов и настраивать их параметры, такие как фильтрация и повторение.

Как создать эффект тумана в 3D лабиринте?

Для создания эффекта тумана в 3D лабиринте можно использовать различные методы, включая использование шейдеров OpenGL. Один из способов - использование градиентной текстуры, которая будет применяться к объектам в лабиринте и создавать впечатление тумана. Также можно настроить параметры освещения и прозрачности объектов, чтобы создать желаемый эффект.

Как построить лабиринт в трехмерном пространстве с помощью OpenGL?

Для построения лабиринта в трехмерном пространстве с помощью OpenGL нужно создать геометрические объекты для стен и пола лабиринта, а затем разместить их в трехмерном пространстве согласно заданным правилам лабиринта. Для этого можно использовать различные алгоритмы генерации лабиринта, чтобы создать интересные и разнообразные структуры.

Какие базовые возможности предоставляет библиотека OpenGL?

Библиотека OpenGL предоставляет возможность рисования трехмерной графики, работы с текстурами, осуществления освещения и других визуальных эффектов.

Какие сторонние библиотеки можно использовать с OpenGL?

С OpenGL можно использовать различные сторонние библиотеки, такие как GLFW, GLEW, FreeGLUT, которые упрощают работу с OpenGL и предоставляют дополнительные функциональные возможности.

Как загрузить текстуры в OpenGL?

Для загрузки текстур в OpenGL можно использовать функции и методы библиотеки, такие как glTexImage2D и glTexParameter, которые позволяют загрузить текстуру из изображения и задать ее параметры.

Как создать эффект тумана в OpenGL?

Для создания эффекта тумана в OpenGL можно использовать функцию glFog, которая позволяет задать параметры тумана, такие как его цвет, плотность и дальность.

Как построить лабиринт с помощью OpenGL?

Для построения лабиринта с помощью OpenGL можно использовать различные алгоритмы, такие как алгоритм поиска в глубину или алгоритм Рекурсивного деления, которые позволяют генерировать случайные лабиринты и рисовать их на экране.

Какие библиотеки используются при создании 3D лабиринта?

Для создания 3D лабиринта используются библиотеки, такие как OpenGL и сторонние библиотеки.

Каким образом осуществляется загрузка текстур в 3D лабиринте?

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