[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум » Игровые движки » IrrLicht Engine » Туториал №1: Hello World (сложность: легкий)
Туториал №1: Hello World (сложность: легкий)
MerGC_TeamДата: Пятница, 20.09.2013, 20:04 | Сообщение # 1
Веселый админ
Группа: Администраторы
Сообщений: 32
Статус: Оффлайн
Показывает как написать стандартное простое приложение “Привет, Мир”. Сейчас я расскажу, как использовать основные рабочие “лошадки”: видео
драйвер, менеджер пользовательского интерфейса и менерджер сцены.
После того как вы настроите свое IDE (этому посвещен ряд туториалов),
ваш компилятор будет знать где лежат заголовки IrrLicht и вам надо
всего лишь подключить их к своему проекту, вот так:

Код
#include "irrlicht.h";
#include "driverChoice.h"// подключает утилиту driverChoiceConsole

В движке все его сущности определены в пространстве имен(namespace)
‘irr’. Таким образом если вам надо обратится к классу движка, то вам
надо написать irr:: перед его именем. Для примера, чтобы использовать
IrrlichtDevice пишите: irr::IrrlichtDevice. Вставляя irr:: перед имене класса, мы сообщеам компилятору, что
используем пространство имен движка. Хотя, можно ибавится от
необходимости писать эту приставку с помощью следующей строки:

C++

Код
using namespace irr;   
using namespace irr;

Ниже перечислены 5 подпространств движка. Поднобное описание каждого из них доступно по этой ссылке: api/namespaces.html . Как и в случае с irr:: вы можете избавится от необходимости их постоянно указывать вот так:

C++

Код
using namespace core;using namespace scene;using namespace video;using namespace io;using namespace gui;

Чтобы использовать Irrlicht.DLL, надо подключить Irrlicht.lib. Это
можно сделать двумя способами, указать в настройках линкера или
использовать диррективу pragma comment.

C++
Код
#ifdef _IRR_WINDOWS_
#pragma comment(lib, "Irrlicht.lib")
#pragma comment(linker, "/subsystem:windows /ENTRY:mainCRTStartup")
#endif


Поддерживая идею кросс-платформенности, мы будет использовать main вместо WinMain.

C++
Код
int main(){

Cамая главная функция движка – это createDevice() , ею создается корневой объект движка IrrlichtDevice и методами которого делается много чего полезного. Функция createDevice() имеет 7 аргументов
  • deviceType: Тип устройства. Принимает значения: EDT_SOFTWARE, EDT_BURNINGSVIDEO, EDT_NULL, EDT_DIRECT3D8, EDT_DIRECT3D9 или
    EDT_OPENGL.

  • windowSize: размер окна в оконном режиме или разрешение экрана в полноэкранном режиме.


  • bits: Количество бит для цвета на один пиксель. Может быть 16 или 32. Параметр часто игнорируется в оконном режиме.


  • fullscreen: определяет в оконном или полноэкранном режиме будет запущено приложение


  • stencilbuffer: включает трафаретный буфер (для рисования теней).


  • vsync: включает вертикальную синхронизацию, полезна для полноэкранного режима.


  • eventReceiver: объект – обработчик событий. Если в нем нет необходимости, ставить равным нулю.


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

C++

Код
// спрашиваем у пользователя про дарайвер (DirectX, OpenGL и т.п.)video::E_DRIVER_TYPE driverType = driverChoiceConsole();

C++

Код
IrrlichtDevice *device = createDevice( video::EDT_SOFTWARE, dimension2d(640, 480), 16,false, false, false, 0);if (!device) return 1;

Определяем заголовок окна чем нибудь симпатичным и подходящим по
смыслу. Заметка: перед кавычками стоит ‘L’, т.к. Irrlicht использует для
текстовых символов 2 байта.

C++
Код
device->setWindowCaption(L"Hello World! - Irrlicht Engine Demo");

Создадим указатели на видео драйвер, менеджер сцены и менеджер пользовательского интерфейса:

C++

Код
IVideoDriver* driver = device->getVideoDriver();ISceneManager* smgr = device->getSceneManager();IGUIEnvironment* guienv = device->getGUIEnvironment();

С помощью GUI среды создадим текстовую метку в координатах (10,10)
левый верхний угол и (260,22) правый нижний. Чтобы выводимый текст был
на русском языке, файлы проекта должны быть в кодировке UTF-8, если у
вас так, то можете смело вместо “Hello World!….” писать “Привет Мир!…”.

C++
Код
guienv->addStaticText(L"Hello World!",rect"s32"(10,10,260,22), true);

Чтобы было не так скучно, загрузим модельку из игры Quake2 и
отобразим ее. Мы просто “попросим” ее у менеджера сцены с помощью
getMesh() и добавим к сцене с помощью addAnimatedMeshSceneNode(). Чтобы
избежать ошибок, проверим загрузилась модель без ошибок.
Метод getMesh универсальный и “знает” о всех типах, которые можно
загрузить в движок, список поддерживаемых форматов смотрите в разделе “Особенности”. Кстати, модельку которую мы загрузим создал Брайн Коллинз.

C++
Код
IAnimatedMesh* mesh = smgr->getMesh("../../media/sydney.md2");if (!mesh){device->drop();return 1;}IAnimatedMeshSceneNode* node = smgr->addAnimatedMeshSceneNode(mesh);

Чтобы моделька выглядела привлекательно, мы натянем на нее материал.
Отключим освещение для этой модели иначе она будет рисоваться абсолютно
черной, потому как на сцене нет источников света. Затем определим
диапазон фреймов, будет использовать предопределенный набор STAND из
списка стандартных анимаций для моделей Quake2.

C++
Код
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), где приблизительно располагается
загруженная модель.

C++
Код
smgr->addCameraSceneNode(0, vector3df(0,30,-40),vector3df(0,5,0));

И так, сцену мы настроили, теперь запускаем главный цикл программы, в котором происходит вывод на экран.

C++
Код
while(device->run()){

Все что может нарисоваться на экране, рисуется между вызовами
beginScene() и endScene(). Функция beginScene() закрашивает выбранным
цветом основной буфер экрана и дополнительный (если нужно). Затем даются
команды менеджеру сцены и менеджеру пользовательского интерфейса
нарисовать свой контент. Фукция endScene() выводит все на экран.

C++
Код
driver->beginScene(true, true, SColor(255,100,101,140));smgr->drawAll();guienv->drawAll(); driver->endScene();}

По завершению главного цикла программы мы должны удалить главный объект движка, созданный с помощью createDevice(). В движке Irrlicht все объекты созданные функциями, начинающимися с приставки ‘create’, можно удалить методом drop (см. irr::IReferenceCounted::drop() ).

C++
Код
device->drop();return 0;}

Это все!
Компилируйте и запускайте.

Источник -> irrlicht.ru
 
Форум » Игровые движки » IrrLicht Engine » Туториал №1: Hello World (сложность: легкий)
  • Страница 1 из 1
  • 1
Поиск: