/c-computer-graphics

A 3D engine prototype, built with pure C

Primary LanguageCDo What The F*ck You Want To Public LicenseWTFPL

Прототип 3D-движка

О прототипе

Разработка прототипа велась по мотивам курса Виртуальная реальность и мультимедиа на базе ФГАОУ ВО ПГНИУ.

Цель: изучить, как приблизительно могут быть устроены изнутри 3D-движки, и научиться чему-нибудь новому в процессе реализации.

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

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

Материалы, использованные в процессе разработки и в конфигурациях, не хранятся в репозитории, ищите их сами 🙃.

Примеры использованных вспомогательных материалов и инструментов

  • официальный сайт NASA, раздел Topography -- карта высот для всей поверхности Земли,
  • карта экосистем Земли на сайте ArcGIS -- может быть использована как основа для карты текстур,
  • QGis Desktop -- ГИС, может быть использована для обработки вышеперечисленных материалов.

Реализованные возможности

На данный момент в прототипе и в приложенных примерах шейдеров реализованы следующие возможности (не только в 3D-графике, но и в аудиосопровождении, и просто вспомогательные возможности настройки):

  • управление шейдерами и программами OpenGL,
  • настраиваемое построение поверхности по карте высот,
  • загрузка текстур в следующих форматах:
    • PNG,
    • JPEG;
  • текстурирование моделей,
  • настройка текстурирования модели с помощью карты текстур,
  • освещение на основе модели затенения Фонга,
  • вычисление нормалей в вершинах модели,
  • анимация поворотов на основе кватернионов,
  • моделирование камеры (от первого лица, от третьего лица, орбитальная),
  • загрузка 3D-моделей в следующих форматах:
    • PLY (почти полная поддержка формата, но импорт только из ASCII-файлов),
    • OBJ (базовая поддержка определения каркаса модели, почти полная поддержка материалов);
  • рельефное текстурирование моделей,
  • фоновое воспроизведение музыки,
  • настраиваемое пользовательское управление сценой.

Что ещё может быть реализовано

Следующие возможности хоть и обдуманы в процессе разработки, но пока совсем не реализованы / реализованы частично / безжалостно выкинуты -- может, будут (или не будут) реализованы в будущем:

  • загрузка текстур в следующих форматах:
    • BMP,
    • TGA;
  • звуковое сопровождение моделей (звуки при движении, поворотах и т.п.),
  • какие-нибудь игровые элементы?,
  • HUD,
  • поддержка API Vulkan (хотя это уже скорее отдельный проект будет, если будет).

Использованные теоретические материалы, практические руководства и документация

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

Использованные технологии и инструментальные средства

Данный прототип разработан на языке программирования C с использованием API OpenGL и OpenAL.

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

  • GLFW -- управление окнами и пользовательским вводом,
  • GLEW -- управление расширениями OpenGL,
  • libpng -- загрузка PNG-изображений,
  • libjpeg-turbo -- загрузка JPEG-изображений,
  • OpenAL Soft -- воспроизведение аудио,
  • Alure -- упрощение работы с OpenAL (в основном - загрузка аудиофайлов).

Сборка выполняется с использованием компилятора GCC и утилиты для автоматизации сборки make.

Полезной оказалась и утилита man, управляющая системными справочными страницами.

Лицензия

Использование, модификация и распространение определено приложенной лицензией.