По прошествии пару месяцев я прочитал книгу Game Programming in C++: Creating 3D Games: Creating 3D Games (Game Design). Это замечательная книга! В ней рассказывается о многих аспектах разработки игр с нуля, не используя готовых движков. В книге объясняются основы и приводится исходный код с пояснениями. После кадой главы приводится список источников, в которых материал главы раскрывается более подробнее.
Есть в книге и некоторые недостатки. В основном это непривычная математическая запись уравнений и левая система координат в OpenGL, хотя в других источниках я такого не встречал.
Я начинал делать конспекты-переводы, но решил бросить это дело, так как мне более интереснее практика.
Unreal Engine 4 и отказ от него
После прочтения книги у меня зачесались руки попробовать всё в действии, написать игру. Я начал думать, что ещё, кроме того, что написано в книге, мне понадобиться. Естественно, ушел в дебри различных алгоритмов, вроде navmesh и перемещения по нему. Люди, работающие в геймдеве, посоветовали поучить Unreal Engine, так как в нём уже всё реализовано.
Мой комп не тянул анриал! Дождавшись премии, я собрал новый комп, запустил Unreal Engine и погрузился в изучение. И с первых же туториалов меня он выбесил - постоянное переключение между кодом и блюпринтами смерти подобно! Промучавшись две недели и взяв паузу понял, что не создание игр меня привлекает, а именно изучение алгоритмов и разработки различных сложных систем тянет в эту область. И так радился план!
Новый roadmap
Изучение того, как писать системы, используемые в играх, как их оптимизировать представляет для меня больший интерес и ценность, чем разработка непосредственно игр. Поэтому новый план заключается именно в изучении и написании ради интереса.
План:
- Написан “песочницу” (sandbox) по книге Мадхава.
- Написать рендерер.
Попалась мне интересная книжка Real-Time Rendering, Fourth Edition, поэтому вначале интересно было бы интересно написать рендерер для реалистичного и красивого отображения игрового мира “песочницы”.
Функционал “песочницы”
- Создание объектов через наследование класса Actor
- Расширение функциональности через наследование класса Component
- Загрузка мешей и их расположение в мире
- Управление персонажем
- Отображение игрового мира от третьего и первого лица
После реализации базового функционала можно будет сосредоточиться на рендерере.