С чего начать создание игры? Конечно же с освоения одного из игровых или графических движков. Впореки распространенному мнению, что путь в геймдев начинается с быстрых решений типа Unreal Engine и Unity, если вы действительно хотите стать разработчиком, то вам просто необходимо познакомиться с такими технологиями как DirectX и OpenGL, изучить один-два классических языка программирования таких как C++ и C#, понять основы 2D и 3D графики. В нашем новом видео мы поптылаись показать, что даже классические ламповые технологии, при всей их сложности, могут быть доступны начинающему программисту. Представляем вам Irrlicht Engine — старый добрый графический «двигатель» которому подсилу справиться с самыми разными задачами. От простых самоделок, до профессиональных проектов начального уровня. Смотрите видео на нашем YouTube канале, задавайте вопросы, ставьте лайки и подписывайтесь! Приятного просмотра!

Irrlicht Engine
Небольшая историческая справка. Irrlicht Engine — бесплатный графический движок для работы с 3D-графикой. Он распространяется бесплатно и его можно использовать в своих проектах без ограничений.
Этот движок поддерживает OpenGL и DirectX, а также включает свои собственные рендереры. С его помощью можно загружать и управлять 3D-объектами (например, моделями и сценами), использовать базовые спецэффекты и добавлять элементы интерфейса (кнопки, окна и т. д.).
Irrlicht отлично подходит для новичков, которые хотят попробовать себя в разработке игр. С ним можно создавать простые игры и демосцены. Движок поддерживает популярные игровые форматы, такие как модели из Quake 2 и Quake 3, а также файлы карт уровней.
Еще один плюс Irrlicht — он не требует установки сторонних модулей для работы с графикой, физикой и интерфейсом. В нем уже есть базовая физика, простая система интерфейсов (GUI) и другие полезные инструменты.
Дополнительно к движку есть три официальных расширения:
- IrrKlang — библиотека для работы со звуком;
- IrrXML — инструмент для загрузки и обработки XML-файлов;
- IrrEdit — редактор сцен, который помогает собирать уровни.
Если нужна продвинутая физика, можно подключить внешний физический движок ChronoEngine, так как встроенные физические возможности Irrlicht довольно простые.
Irrlicht Engine — хороший старт для изучения 3D-графики и основ геймдева!
Туториал
В видео мы рассмотрели создание простого консольного проекта C++ в Visual Studio, выполнили необходимые настройки, написали базовый код для вывода вращающегося текстурированного куба при помощи движка Irrlicht Engine. Вы с легкостью сможете повторить этот пример у себя дома. Запаситесь терпением! Visual Studio может выкинуть разные сюрпризы, если что-то не получится, пишите ваши вопросы в комментариях к видео или в комментариях к этой статье — мы обязательно ответим!
В завершении статьи приводим полный листинг программы и ссылку на движок:
Irrlicht Engine https://irrlicht.sourceforge.io
#include <iostream>
#include <irrlicht.h>
using namespace irr;
using namespace core;
using namespace scene;
using namespace video;
using namespace io;
using namespace gui;
int main()
{
IrrlichtDevice* device =
createDevice(video::EDT_OPENGL, dimension2d<u32>(640, 480), 16,
false, false, false, 0);
if (!device)
return 1;
device->setWindowCaption(L"Compupico.com loves Irrlicht Engine");
IVideoDriver* driver = device->getVideoDriver();
ISceneManager* smgr = device->getSceneManager();
IGUIEnvironment* guienv = device->getGUIEnvironment();
IGUIStaticText* text = guienv->addStaticText(L"Compupico.com loves Irrlicht Engine",rect<s32>(10, 10, 260, 22), true);
text->setOverrideColor(SColor(255, 255, 255, 255));
ITexture* texture = driver->getTexture("compupico.jpg");
ISceneNode* cube = smgr->addCubeSceneNode();
if (cube) {
cube->setMaterialFlag(EMF_LIGHTING, false);
cube->setMaterialTexture(0, texture);
ISceneNodeAnimator* anim =
smgr->createRotationAnimator(vector3df(0,1,1));
cube->addAnimator(anim);
anim->drop();
}
smgr->addCameraSceneNode(0, vector3df(0,10,10), vector3df(0,0,0));
while (device->run())
{
driver->beginScene(true, true, SColor(255,39,0,89));
smgr->drawAll();
guienv->drawAll();
driver->endScene();
}
device->drop();
return 0;
}