Доброго времени суток, уважаемый Хабражитель! Пройдя курс компьютерной графики в университете и много поигравшись с OpenGL, я решил, что пора двигаться дальше и попробовать свои силы в разработке игр.
Честно говоря, мне не очень хотелось писать свой движок с нуля.
Основной целью было посмотреть, как это делается, извлечь уроки и, возможно, создать что-то на основе выбранного движка.
Беглый поиск показал, что открытые кроссплатформенные движки немного сложны.
У одного проблемы с Linux, Windows или Mac OS, у другого проблемы с последними версиями мобильной ОС, третий почти заброшен.
Но наконец-то мне попался один очень привлекательный экземпляр, о котором я хочу рассказать в этой статье.
Название этого фреймворка — 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
смэйк… && сделай в каталоге строить (Пользователи 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
Если все в порядке, то вы должны увидеть что-то вроде этого:
Итак, что же мы видим в папке с игрой кроме файлов проекта 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. Выбираем КОЛЛАДУ, потому что на этом этапе проще (подробности в конце статьи).
Результат выглядит примерно так:
Для ленивых и для тех, у кого под рукой нет блендера.
Сцена в блендере: 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++ #Разработка игр
-
Идеальные Игры Для Молодых Женщин
19 Oct, 24 -
Lenovo Ideacentre Stick 300: Почти Исчез
19 Oct, 24 -
Кандалакша На Год
19 Oct, 24 -
Какой Век Сегодня?
19 Oct, 24