Gameplay 3D Framework — Простой Старт Кроссплатформенной Разработки 3D-Игр

Доброго времени суток, уважаемый Хабражитель! Пройдя курс компьютерной графики в университете и много поигравшись с OpenGL, я решил, что пора двигаться дальше и попробовать свои силы в разработке игр.

Честно говоря, мне не очень хотелось писать свой движок с нуля.

Основной целью было посмотреть, как это делается, извлечь уроки и, возможно, создать что-то на основе выбранного движка.

Беглый поиск показал, что открытые кроссплатформенные движки немного сложны.

У одного проблемы с Linux, Windows или Mac OS, у другого проблемы с последними версиями мобильной ОС, третий почти заброшен.

Но наконец-то мне попался один очень привлекательный экземпляр, о котором я хочу рассказать в этой статье.



GamePlay 3D Framework — простой старт кроссплатформенной разработки 3D-игр

Название этого фреймворка — GamePlay 3D. Информации о нем в Интернете не так много, не говоря уже о Рунете.

Это фреймворк с открытым исходным кодом, написанный на C++ для программирования игр на C++ со всеми вытекающими преимуществами и недостатками.

Авторы проекта позиционируют его как универсальный инструмент, своего рода аналог cocos2d для 3D-игр.

Чтобы начать писать в GamePlay 3D не обязательно иметь глубокие знания OpenGL, GLSL или математики 3D-графики, но мы все понимаем, что для достижения хорошего результата от этого никуда не деться.

Подробности и небольшой пример для начала — под катом.

Начну с краткого списка основных особенностей движка:

  • поддержка Linux, Windows, Mac OS X, Android, iOS и Blackberry OS
  • C++ API, игровые скрипты на Lua
  • OpenGL 3.2+ и OpenGL ES 2.0
  • сборка проекта для разных ОС в один клик*
  • простая и удобная настройка сцен (объекты, материалы, физика, анимация)
  • движок физики пуль (ну он вроде стандартный)
  • готовый инструмент для конвертации 3D-сцен и шрифтов в собственный бинарный формат
  • поддерживает клавиатуру, мышь, джойстик, экранный джойстик и сенсорный ввод
  • удобная работа со звуком (wav, ogg) в 3D
  • свой собственный графический интерфейс с кнопками, флажками, ползунками и т. д.
  • и многое другое.

*ну почти в один.

Более полный список возможностей с сайта проекта.

  • Полнофункциональная система рендеринга на базе OpenGL 3.2+ (настольные компьютеры) и OpenGL ES 2.0 (мобильные устройства).

  • Система материалов на основе шейдеров со встроенной общей библиотекой шейдеров.

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

  • Ландшафты на основе карты высот с несколькими поверхностными слоями и уровнем детализации.

  • Декларативные привязки сцен (материалы) и вложения узлов (эмиттеры частиц, объекты физических столкновений, источники 3D-аудио)
  • Декларативная система частиц
  • Простой в использовании рендеринг текста и спрайтов
  • Физическая система (с использованием физики пули)
    • физика транспортных средств
    • физика персонажей
    • динамика твердого тела
    • ограничения
    • объекты-призраки
  • Декларативная система пользовательского интерфейса с поддержкой тематических 2D и 3D форм.

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

    • кнопка
    • этикетка
    • текстовое окно
    • ползунок
    • флажок
    • переключатель
    • абсолютная компоновка
    • вертикальная планировка
    • схема потока
  • Полностью расширяемая система анимации с поддержкой анимации скелетных персонажей.

  • Полноценная 3D-аудиосистема с поддержкой WAV и OGG.
  • Полная библиотека векторных математических вычислений с поддержкой 2D/3D-математики и отбраковки 3D-объектов.

  • Поддержка мыши, клавиатуры, сенсорного ввода, жестов и геймпада
  • Привязки сценариев Lua и инструмент генератора привязок
  • Государственный автомат ИИ
Сейчас мы разберемся, как быстро и легко создать небольшую демо-версию с крохотной сценой, несколькими объектами, физикой и базовым освещением, используя исключительно инструменты с открытым исходным кодом.

Ссылки на использованные материалы и архив с готовым проектом разбросаны по всему тексту и собраны вместе в конце статьи.

Мы создадим нашу первую демо-версию в Linux. Нам понадобится:

  • любимая IDE или текстовый редактор
  • cmake, сделать, gcc
  • Blender с поддержкой экспорта COLLADA
Сборка движка состоит из загрузки исходников с Github, установки зависимостей и выполнения.

смэйк… && сделай в каталоге строить (Пользователи Windows и Mac OS X открывают существующий проект Visual Studio или XCode соответственно и компилируют его одним щелчком мыши).

Как только компиляция будет успешно завершена, мы начнем создавать наш проект, выполнив скрипт геймплей-новый проект.(sh|bat) в корневом каталоге фреймворка.

Скрипт задаст несколько вопросов, ответив на которые мы получим готовую рыбу проекта в указанной нами директории.

Назовем проект Demo и в качестве пути укажем текущий каталог (корневой каталог движка).



Проект

Созданный проект уже содержит все необходимые файлы для компиляции и запуска игры, а также файлы проекта для Visual Studio и XCode. Пользователи Linux вынуждены озаботиться настройкой проекта для своей IDE. Вся настройка состоит из указания каталога с исходниками игры, добавления в проект библиотек движка и т.д. Сейчас мы не будем на этом останавливаться, а просто воспользуемся обычными утилитами vim, cmake и make. Давайте скомпилируем проект, запустим его и посмотрим, что у нас есть, а потом разберемся, из чего он состоит, и добавим немного драматизма.

  
  
  
   

cd Demo/build cmake .

make

Запустим полученный двоичный файл:

cd .

/bin/linux .

/Demo

Если все в порядке, то вы должны увидеть что-то вроде этого:

GamePlay 3D Framework — простой старт кроссплатформенной разработки 3D-игр

Итак, что же мы видим в папке с игрой кроме файлов проекта VS, XCode и cmake? game.config — базовая конфигурация, такая как разрешение, полноэкранный или оконный режим и т. д. рез/ - каталог с игровыми ресурсами res/box.gpb — игровая сцена (просто куб с камерой и источником света), закодированная в нативный формат box.dae — игровая сцена в сыром виде, в данном случае в формате COLLADA color.(frag|vert) - шейдеры, используемые в материале куба.

рез/box.material — описание материала куба источник/ - источники источник/Демо.

(cpp|h) - базовый класс андроид/ — проект по созданию игры для Android мусорное ведро/ - скомпилированные двоичные файлы Но готовый пример с вращающимся кубом слишком прост и скучен, да и к тому же мы хотим поковыряться в движке немного глубже: добавить побольше кубиков и даже шариков, определить их физические свойства и материалы.

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

Важно отметить, что в игре высота определяется осью й , но нет я , в отличие от Блендера (фактически никакой разницы, но, похоже, есть некоторые проблемы, если высота не определена по оси й в GamePlay 3D, поэтому для чистоты эксперимента будем использовать й ).

Нам нужно как-то назвать все объекты, чтобы мы могли обращаться к ним из кода игры и отличать их друг от друга.

Давайте поступим просто – все кубики будут называться коробкаX , мячи мячX , Где Икс - любой номер.

Назовем поверхность, по которой они плавают, полом.

Назовем камеру камерой и повернем ее так, чтобы в объектив попало то, что нам нужно.

Сцена готова и может быть экспортирована в формат, понятный утилите Gameplay-encoder. На выбор есть два варианта: FBX и COLLADA. Выбираем КОЛЛАДУ, потому что на этом этапе проще (подробности в конце статьи).

Результат выглядит примерно так:

GamePlay 3D Framework — простой старт кроссплатформенной разработки 3D-игр

Для ленивых и для тех, у кого под рукой нет блендера.

Сцена в блендере: dl.dropbox.com/u/64710641/boxes.blend Сцена в КОЛЛАДЕ: dl.dropbox.com/u/64710641/boxes.dae Сцена конвертирована в GamePlayBundle: dl.dropbox.com/u/64710641/boxes.gpb Именно здесь в игру вступает кодировщик игрового процесса.

Эта утилита преобразует различные неперевариваемые форматы файлов в собственный двоичный формат платформы.

Мы не хотим тратить лишнее время и память на разбор сцены из XML или рендеринг векторного шрифта в 3D? Такие объекты лучше заранее разобрать и сохранить в оптимизированном бинарном виде, чтобы потом их можно было просто загрузить в память.

Итак, легким движением руки конвертируем экспортированный из Blender файл Scene.dae в Scene.gpb и помещаем этот файл в подкаталог res/ нашего проекта:

path/to/GamePlay/bin/linux/gameplay-encoder scene.dae

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

Мы просто создадим файл с описанием сцены, а дальше фреймворк все сделает сам.

Итак, файл описания сцены game.scene:

scene boxes {

Теги: #gamedev #gameplay3d #открытый исходный код #C++ #Разработка игр

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.