Разработка прототипа велась по мотивам курса Виртуальная реальность и мультимедиа на базе ФГАОУ ВО ПГНИУ.
Цель: изучить, как приблизительно могут быть устроены изнутри 3D-движки, и научиться чему-нибудь новому в процессе реализации.
Крайне не рекомендуется использовать этот прототип где бы то ни было.
Для демонстрации возможностей прототипа предоставлен набор конфигураций сцен, от самых простых до чуть менее простых.
Материалы, использованные в процессе разработки и в конфигурациях, не хранятся в репозитории, ищите их сами 🙃.
- официальный сайт NASA, раздел Topography -- карта высот для всей поверхности Земли,
- карта экосистем Земли на сайте ArcGIS -- может быть использована как основа для карты текстур,
- QGis Desktop -- ГИС, может быть использована для обработки вышеперечисленных материалов.
На данный момент в прототипе и в приложенных примерах шейдеров реализованы следующие возможности (не только в 3D-графике, но и в аудиосопровождении, и просто вспомогательные возможности настройки):
- управление шейдерами и программами OpenGL,
- настраиваемое построение поверхности по карте высот,
- загрузка текстур в следующих форматах:
- PNG,
- JPEG;
- текстурирование моделей,
- настройка текстурирования модели с помощью карты текстур,
- освещение на основе модели затенения Фонга,
- вычисление нормалей в вершинах модели,
- анимация поворотов на основе кватернионов,
- моделирование камеры (от первого лица, от третьего лица, орбитальная),
- загрузка 3D-моделей в следующих форматах:
- PLY (почти полная поддержка формата, но импорт только из ASCII-файлов),
- OBJ (базовая поддержка определения каркаса модели, почти полная поддержка материалов);
- рельефное текстурирование моделей,
- фоновое воспроизведение музыки,
- настраиваемое пользовательское управление сценой.
Следующие возможности хоть и обдуманы в процессе разработки, но пока совсем не реализованы / реализованы частично / безжалостно выкинуты -- может, будут (или не будут) реализованы в будущем:
- загрузка текстур в следующих форматах:
- BMP,
- TGA;
- звуковое сопровождение моделей (звуки при движении, поворотах и т.п.),
- какие-нибудь игровые элементы?,
- HUD,
- поддержка API Vulkan (хотя это уже скорее отдельный проект будет, если будет).
Во время разработки были использованы следующие читабельные материалы:
- спецификация OpenGL,
- спецификация GLSL,
- руководство OpenGL-разработчика (aka "красная книга") за авторством Kessenich J., Sellers G., Shreiner D.,
- учебное пособие "Виртуальная реальность и мультимедиа. Построение виртуального мира средствами OpenGL" за авторством Рябинина К. В. (профиль автора на GitHub - @icosaeder),
- спецификация OpenAL,
- руководство OpenAL-разработчика,
- документация использованных программных библиотек (GLFW, libpng, ... - тысячи их).
Данный прототип разработан на языке программирования C с использованием API OpenGL и OpenAL.
При разработке использованы следующие программные библиотеки:
- GLFW -- управление окнами и пользовательским вводом,
- GLEW -- управление расширениями OpenGL,
- libpng -- загрузка PNG-изображений,
- libjpeg-turbo -- загрузка JPEG-изображений,
- OpenAL Soft -- воспроизведение аудио,
- Alure -- упрощение работы с OpenAL (в основном - загрузка аудиофайлов).
Сборка выполняется с использованием компилятора GCC и утилиты для автоматизации сборки make.
Полезной оказалась и утилита man, управляющая системными справочными страницами.
Использование, модификация и распространение определено приложенной лицензией.