Вобщем жду критики Оо
Оригинал:
http://irrlicht.sourceforge.net/tut001.html
Урок 1: Hello World
Этот Урок показывает, как установить IDE, чтобы пользоваться Irrlicht Engine и как написать простую программу Hello World с его помощью. Программа покажет, как использовать VideoDriver, GUIEnvironment и SceneManager.
Результат этого примера будит, похож на это:
Настройка IDE
Чтобы использовать движок, мы должны подключить заголовочный файл <irrlicht.h>, который находится в Irrlicht Engine SDK папке \include. Чтобы позволить компилятору найти этот заголовочный файл, папка где он находится должна быть где-нибудь указана. Это по-разному для каждой IDE и компилятора. Я объясню, как это делается в Microsoft Visual Studio C++ 6.0 и .NET:
Если вы используете Version 6.0, выберите Menu Extras -> Options. Выберите вкладку директории, и выберите пункт 'Include' в списке. Добавьте директорию \include из папки Irrlicht Engine в список директорий. Теперь компилятор заголовочный файл Irrlicht.h. Мы также нуждаемся в пути к irrlicht.lib в списке, также выбираете вкладку 'Libraries' и добавьте директорию \lib\VisualStudio.
![Изображение](http://irrlicht.sourceforge.net/images/tutorials/vc6optionsdir.jpg)
Если ваша IDE Visual Studio .NET, выберите Tools -> Options. Выберите вход Projects и затем выберите директориюVC++. Выберите 'show directories for include files' в списке, и добавьте директорию \include из папки Irrlicht Engine в список директорий, так компилятор найдет заголовочный файл Irrlicht.h. Мы также нуждаемся в нахождении irrlicht.lib, также выбираете'show directories for Library files' и добавьте директорию lib\VisualStudio.
Давайте начнем!
После того как мы настроили IDE, теперь компилятор знает где находятся заголовочные файлы Irrlicht Engine, таким образом мы можем включить их теперь в наш код.
Код:
#include <irrlicht.h>
В Irrlicht Engine, все находится в пространстве имен 'irr'. Таким образом, если вы хотите воспользоваться классом движка, вы должны написать irr:: перед именем класса. Для примера, чтобы использовать IrrlichtDevice, напишите: irr::IrrlichtDevice. Чтобы избежать необходимость набирать irr:: перед именем каждого класса, мы скажем компилятору, что мы используем пространство имен.
Код:
using namespace irr;
Также 5 подпространств имен включены в Irrlicht Engine. Рассмотрим их: вы сможете прочитать подробное описание об них в документации кликнув по ссылке 'Namespace List'. Чтобы сохранить этот пример простым, мы должны установить пространство имен, следовательно:
Код:
using namespace core;
using namespace scene;
using namespace video;
using namespace io;
using namespace gui;
Чтобы воспользоваться файлом Irrlicht.DLL, мы должны установить соединение с Irrlicht.lib. Мы можем установить эту опцию в настройках проекта, но сделаем это проще, мы используем примечание 'pragma':
Код:
#pragma comment(lib, "Irrlicht.lib")
Теперь главный метод: чтобы сохранить этот пример простым мы используем void main(), который может быть использован на любой платформе. Однако, на Windows платформах, мы можем также использовать метод WinMain если мы хотим избавиться от консольного окна, которое выскакивает при старте программы с main().
Код:
int main()
{
Самая важная функция движка это функция 'createDevice'. Irrlicht Device, это главный объект для создания всего в движке, может быть создано с им. createDevice() имеет 7 параметров:
deviceType: Тип устройства. Этим теперь может быть Null device, Software device, Direct3D8, Direct3D9 или OpenGL. В этом примере мы воспользуемся EDT_SOFTWARE, но для использования, вы можете изменить их хоть на EDT_NULL, EDT_DIRECT3D8, EDT_DIRECT3D9 или EDT_OPENGL.
windowSize: Размер окна или полноэкранный режим которое будит создано. В этом примере мы воспользуемся 512x384.
bits: Число битов которое будит использоваться в полноэкранном режиме. Может быть16 или 32. Этот параметр будит проигнорирован, когда используется оконный режим.
fullscreen: Определяет хотим ли мы чтобы устройство работало в полноэкранном режиме или нет.
stencilbuffer: Определяет хотим ли мы использовать трафаретный буфер для отрисовки теней.
vsync: Определяет хотим ли мы включить vsync. Это возможно только в полноэкранном режиме.
eventReceiver: объект получения событий. Мы не будим использовать этот параметр здесь, и установим его в 0.
Код:
IrrlichtDevice *device =
createDevice(EDT_SOFTWARE, dimension2d<s32>(512, 384), 16,
false, false, false, 0);
Теперь мы установим заголовок окна, каким-нибудь хорошим текстом. Замете что где 'L' первый символ строки, Irrlicht Engine использует большие символы строки для вывода текста.
Код:
device->setWindowCaption(L"Hello World! - Irrlicht Engine Demo");
Теперь мы сохраним указатель на видео устройство, SceneManager, и графический пользовательский интерфейс окружения, так чтобы нам не приходилось всегда писать device->getVideoDriver(), device->getSceneManager() и device->getGUIEnvironment().
Код:
IVideoDriver* driver = device->getVideoDriver();
ISceneManager* smgr = device->getSceneManager();
IGUIEnvironment* guienv = device->getGUIEnvironment();
Мы добавляем заголовок hello world окну используя окружение GUI. Текст расположится на позиции (10,10) левого верхнего угла и (200,22) правого нижнего угла.
Код:
guienv->addStaticText(L"Hello World! This is the Irrlicht Software engine!",
rect<int>(10,10,200,22), true);
Чтобы вывести что-нибудь интересной, мы загружаем модель из Quake 2 и выводим ее. Мы только должны получить Mesh от Scene Manager с помощью getMesh() и добавить SceneNode на вывод mesh с помощью addAnimatedMeshSceneNode(). Вместо загрузки файла Quake2 (.md2), также возможна загрузка объектного файла Maya (.obj), законченную карту Quake3 (.bsp) или файл Milshape (.ms3d).
Между прочим, эта классная модель Quake 2 названая sydney.md2 была создана Brian Collins.
Код:
IAnimatedMesh* mesh = smgr->getMesh("../../media/sydney.md2");
IAnimatedMeshSceneNode* node = smgr->addAnimatedMeshSceneNode( mesh );
Чтобы модель выглядела немного лучше, мы изменим немного материал: мы отключим освещение, потому что у нас здесь нету динамического освещения и модель была бы полностью черной. Теперь мы установим цикл кадра так чтобы анимация повторялась между 0 и 310 кадрами. Теперь мы наложим текстуру на модель. Без этого модель была бы нарисована используя только сплошной цвет.
Код:
if (node)
{
node->setMaterialFlag(EMF_LIGHTING, false);
node->setFrameLoop(0, 310);
node->setMaterialTexture( 0, driver->getTexture("../../media/sydney.bmp") );
}
Чтобы посмотреть на модель, мы помещаем камеру в 3д пространстве в позицию (0, 10, -40). Камера смотрит оттуда на (0,5,0).
Код:
smgr->addCameraSceneNode(0, vector3df(0,30,-40), vector3df(0,5,0));
Хорошо. Теперь, когда мы настроили сцену давайте все это нарисуем: мы запускаем устройство в цикле while(), пока устройство не будит работать больше. Это будит пока пользователь не закроек окно или не нажмет ALT+F4 в Windows.
Код:
while(device->run())
{
Все должно быть нарисовано между beginScene() и endScene() запросами. beginScene очищает экран с цветом и также буфер глубины, если это желательно. Теперь мы позволим Scene Manager и окружению GUI нарисовать их содержимое. С endScene() запросом, все выводится на экран.
Код:
driver->beginScene(true, true, SColor(255,100,101,140));
smgr->drawAll();
guienv->drawAll();
driver->endScene();
}
После того как мы закончим, мы должны удалить Irrlicht Device созданный раньше createDevice(). В Irrlicht Engine, вы должны удалить все объекты которые вы создали при помощи метода или функции начинающимся с 'create'. Объект удалить очень просто calling ->drop(). Для большей информации смотрите документацию.
Код:
device->drop();
return 0;
}
Это все. Компилируете и запускаете.