Установка
Так как данный урок рассчитан на новичков, мы будем использовать простейший способ установки движка. Для этого нам понадобится code::blocks. Irrlich не очень хорошо дружит с последними версиями блокса, поэтому качаем отсюда и устанавливаем проверенную версию 10.05. Code::blocks уже содержит в своем установщике компилятор, поэтому качать его отдельно не нужно. Далее создаем на жестком диске папку, где будут храниться наши проекты (у меня «D:/IrrlichtDev»). Теперь качаем отсюда последнюю версию Irrlicht’а и разархивируем ее в созданный нами каталог.
Создание проекта
Все необходимое у нас есть, настало время для создания проекта. Открываем Code:blocks, далее «File>New>Project», там выбираем «Irrlicht project». Следуя инструкции задаем имя нашему проекту, выбираем тот каталог для хранения, указываем в качестве компилятора «GNU GCC Compiler» и, если просит, говорим где находится движок.
Все, проект создан, минимальный код сгенерирован автоматически, но если попробовать скомпилировать его, то получим в ответ 2 ошибки. Ничего страшного, просто в 70 строке заменяем dimension2d<s32>
на dimension2du
. Компилируем, запускаем и видим прекрасную, низкополигональную женщину с примитивной анимацией.
Поздравляю, это ваш первый проект на движке Irrlicht. Давайте сотрем ненужные комментарии (мы же умные, мы и так все поймем) и оставим следующее:
#include <irrlicht.h> using namespace irr; // using namespace core; // Здесь указываем пространства имен движка, для того, чтобы using namespace scene; // не указывать их каждый раз, когда обращаемся using namespace video; // к объекту движка. using namespace io; // using namespace gui; // int main(int argc, char** argv) { IrrlichtDevice *device = // Здесь создаем ссылку на главный объект движка. createDevice(EDT_SOFTWARE, dimension2du(640, 480), 16, // 1-й параметр - это рендер. Сейчас стоит программный false, false, false, 0); // рендер, но можно указать EDT_OPENGL, например. device->setWindowCaption(L"Hello HABRAHABR"); // Указываем заголовок нашего окошка. IVideoDriver* driver = device->getVideoDriver(); // Ссылки на видео драйвер и менеджер сцены. ISceneManager* smgr = device->getSceneManager(); // Подробнее о них можно почитать в документации. smgr->addCameraSceneNode(0, vector3df(0,30,-40), vector3df(0,5,0)); // Добавляем в менеджер сцены новую камеру. while(device->run()) // Это наш основной цикл. Он будет выполняться постоянно, пока работает движок. { driver->beginScene(true, true, SColor(0,200,200,200)); // Драйвер начинает отрисовку сцены. smgr->drawAll(); // Менеджер сцены рисует свои объекты. driver->endScene(); // Драйвер заканчивает отрисовку сцены. } device->drop(); // Движок перестает работать, можно его удалить. return 0; }
Сейчас на нашей сцене ничего нет кроме камеры, так что давайте добавим простой кубик. Для этого просто добавим следующую строчку:
IMeshSceneNode * wall = smgr->addCubeSceneNode();
Если запустим проект, то увидим, что наш кубик полностью черный. Это потому, что на сцене нет освещения.
Чтобы на него не распространялись законы физики, связанные с освещением, ниже добавим следующее:
wall->setMaterialFlag(EMF_LIGHTING,false);
Думаю не нужно объяснять содержание этой строки.
Чтобы наш рукотворный примитив не был незримо белым, наложим на него текстуру, которую возьмем в стандартном наборе движка. Ниже пишем следующее:
wall->setMaterialTexture(0, driver->getTexture("../../media/wall.jpg")); //Цифра "0" обозначает стой текстуры.
Запускаем и видим красивый кусок стены.
Ну что это за кусок стены, если он не вращается? Значит далее пишем:
wall->setRotation(wall->getRotation() + vector3df(0,1,0));
Запускаем, проверяем.
Раз уж наш куб так истерично вращается, то поддержим психоделическую атмосферу неистово меняющимся цветом фона.
Создадим некую переменную «i», к которой каждый кадр будет прибавляться единица, а когда она будет достигать значения больше 256, будем сбрасывать её на ноль. Затем эту переменную укажем в качестве значения R, G и B цвета фона при отрисовке сцены. Таким образом, весь наш цикл while
будет выглядеть так:
while(device->run()) { int i; i++; if (i>256) i=0; driver->beginScene(true, true, SColor(0,i,i,i)); // Здесь указывается цвет фона. wall->setRotation(wall->getRotation() + vector3df(0,1,0)); smgr->drawAll(); driver->endScene(); }
Запускаем, наблюдаем.
Для ленивых вот полный исходный код урока:
#include <irrlicht.h> using namespace irr; // using namespace core; // Здесь указываем пространства имен движка, дл того, чтобы using namespace scene; // не указывать их каждый раз, когда обращаемся using namespace video; // к объекту движка. using namespace io; // using namespace gui; // int main(int argc, char** argv) { IrrlichtDevice *device = // Здесь создаем ссылку на главный объект движка. createDevice(EDT_OPENGL, dimension2du(640, 480), 16, // 1-й параметр - это рендер. Сейчас стоит программный false, false, false, 0); // рендер, но можно указать EDT_OPENGL, например. device->setWindowCaption(L"Hello HABRAHABR"); // Указываем заголовок нашего окошка. IVideoDriver* driver = device->getVideoDriver(); // Ссылки на видео драйвер и менеджер сцены. ISceneManager* smgr = device->getSceneManager(); // Подробнее о них можно почитать в документации. smgr->addCameraSceneNode(0, vector3df(0,30,-40), vector3df(0,5,0)); // Дабавляем в менеджер сцены новую камеру. IMeshSceneNode * wall = smgr->addCubeSceneNode(); wall->setMaterialFlag(EMF_LIGHTING,false); wall->setMaterialTexture(0, driver->getTexture("../../media/wall.jpg")); while(device->run()) // Это наш основной цикл. Он будет выполняться постоянно, пока работает движок. { int i; i++; if (i>256) i=0; driver->beginScene(true, true, SColor(0,i,i,i)); // Драйвер начинает отрисовку сцены. wall->setRotation(wall->getRotation() + vector3df(0,1,0)); smgr->drawAll(); // Менеджер сцены рисует свои объекты. driver->endScene(); // Драйвер заканчивает отрисовку сцены. } device->drop(); // Движок перестает работать, можно его удалить. return 0; }
ссылка на оригинал статьи http://habrahabr.ru/post/191994/
Добавить комментарий