Game Engine своими руками на с++. Часть 1 (Вступление)

в 17:03, , рубрики: c++, Анализ и проектирование систем, разработка игр, метки: , , ,
image

Game Engine
Проектируем, пишем, думаем рассуждаем, читаем и многое другое
Внимание: статьи содержат много костылей!

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

Сейчас отойду от темы и хочу кое-что сразу оговорить… Я не являюсь хорошим программным архитектором и Senior developer(ом). Мне 21 и я маленький амбициозный C++ middle developer, могу ошибаться, и писать глупости.

Only a Sith deals in absolutes. Obi-Wan “Ben” Kenobi

Рад видеть замечания и предложения в комментариях.
Пожалуй на этом, я закончу вступительную часть и перейдем к делу.

Часть 1: Вступление

Во-первых, надо разобраться в чем суть движка и зачем его писать.
Хм… И что же это ?!

Игровой движок

центральный программный компонент компьютерных и видеоигр или других интерактивных приложений с графикой, обрабатываемой в реальном времени. Он обеспечивает основные технологии, упрощает разработку и часто даёт игре возможность запускаться на нескольких платформах, таких как игровые консоли и настольные операционные системы, например, GNU/Linux, Mac OS X и Microsoft Windows.
Ссылка на Wiki

— Такс… Значит, просто написать пару классов мало ?!

Хорошие движки (UE, Unity, Cocos2D) состоят из пары сотен классов, нескольких подсистем и кучи менеджеров. Если конкретней:

  • Графическая система
  • Звуковая система
  • Система для работы с сетью
  • Менеджер процессов
  • Менеджер задач
  • Менеджер объектов
  • Менеджер сцен

и многое другое…

— И что же нам делать? Как, что и куда?

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

Последовательность статей:

Это только первые наброски, материала будет намного больше!

Что должно получиться

  • Модульность. Слабая связность.
  • Мультиплатформенность.
  • Простота добавления нового функционала, без изменения существующего кода.
  • Использование разных графических библиотек: DirectX, OpenGL, Vulkan.
  • Графические примочки: тесселяция, PBR, SSLR и много других непонятных навороченных плюх.
  • Оптимизация рендеринга: отсечение невидимых граней, BSP деревья и прочая нечисть.
  • Редактор уровней.

Для вводной статьи, думаю, хватит. В следующей статье мы напишем каркас для движка и задумаемся над взаимодействием систем и менеджеров, а так же что туда должно входить. Жду ваших советов, материала и предложений

Так же вот списочек материала, для тех кому интересно:

Автор: Барак Адама

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js