Irrlicht — довольно популярный графический движок. Его особенностью является простота изучения, что немаловажно для новичков.
Для создания первого приложения вам понадобится скачать SDK и собрать его (если у вас linux или Mac) / настроить студию если у вас Windows.
У меня Linux, откомпилируем движок.
Вы скачали архив с движком.
Распакуйте его и войдите через консоль в каталог source.
После чего просто выполните
make
Теперь в lib/Linux у вас появится libIrrlicht.a. Всё готово.
Приступаем к кодингу.
Первое что надо сделать при написании программы использующей Irrlicht — подключить заголовочный файл.
#include <irrlicht.h>
Структура движка такова, что все его компоненты находятся в namespace irr. Чтобы не писать десятки рас irr:: включим в код следующую строку:
using namespace irr;
Кроме того в нём есть 5 пространств имён второго уровня:
using namespace core; using namespace scene; using namespace video; using namespace io; using namespace gui;
После этих манипуляций приступим к созданию главной функции:
int main(){
Инициализируем движок и создадим его самый главный объект:
IrrlichtDevice *device = createDevice( video::EDT_SOFTWARE, dimension2d<u32>(640, 480), 16, false, false, false, 0);
Первый параметр — тип device. Доступны — Null device ( EDT_NULL ), Software device ( EDT_SOFTWARE ), DirectX8( EDT_DIRECTX8) , DirectX9.0c ( EDT_DIRECTX9 ) и OpenGL ( EDT_OPENGL ).
Второй — размер окна.
Третий — количество цветов ( 16 — 32 ).
Далее можно указать полно экранный режим, использование буфера и другие пока не нужные нам вещи.
Укажем заголовок окна:
device->setWindowCaption(L"Hello World! - Irrlicht Engine Demo");
Получим указатели на драйвер, сцену и графический интерфейс:
IVideoDriver* driver = device->getVideoDriver(); ISceneManager* smgr = device->getSceneManager(); IGUIEnvironment* guienv = device->getGUIEnvironment();
Добавим в окно текст:
guienv->addStaticText(L"Hello World! This is the Irrlicht Software renderer!", rect<s32>(10,10,260,22), true);
Текст будет расположен на позиции (10,10) (левый верхний угол ) и (200,22) ( правый нижний угол ).
Теперь добавим объект:
IAnimatedMesh* mesh = smgr->getMesh("../../media/sydney.md2");
Параметр как вы понимаете путь к модели.
IAnimatedMeshSceneNode* node = smgr->addAnimatedMeshSceneNode( mesh );
Если всё успешно поколдуем на моделью:
if (node) { node->setMaterialFlag(EMF_LIGHTING, false); //отключаем освещение node->setMD2Animation(scene::EMAT_STAND); //заставляем модель двигаться node->setMaterialTexture( 0, driver->getTexture("../../media/sydney.bmp") ); //указываем текстуру }
Устанавливаем камеру в позицию 0,30,-40, которая будет смотреть в точку 0,5,0:
smgr->addCameraSceneNode(0, vector3df(0,30,-40), vector3df(0,5,0));
Теперь нужно создать цикл который будет работать пока мы не закроем окно:
while(device->run()){ driver->beginScene(true, true, SColor(255,100,101,140)); smgr->drawAll(); guienv->drawAll(); driver->endScene(); }
Всё должно отрисовываться между beginScene() и endScene().
После того как мы нажали кнопку закрытия завершаем программу:
device->drop(); //уничтожаем device return 0;
Можно компилировать. Текстуру и модельку вы можете найти в SDK, там же куча примеров (включая и этот).
В Linux компилируется так:
g++ main.cpp -o main -IПУТЬ_К_ДВИЖКУ/include -LПУТЬ_К_ДВИЖКУ/lib/Linux -lIrrlicht -L/usr/X11R6/lib -lGL -lXxf86vm -lXext -lX11
На этом пока всё.