MOLDOVANIA
Меню сайта
Категории каталога
Мои статьи [0]
Уроки [2]
Уроки
Справочник [3]
что есть что
Из интернета [2]
Из интернета
Наш опрос
Оцените мой сайт
Всего ответов: 58
Главная » Статьи » Из интернета

01. Hellow World
Поехали!

После того, как мы настроили среду разработки, можем начать писать программу, итак, внесём свои первые строки.
//c++

#include


Мы подключили самый главный заголовочный файл движка.

В Irrlicht все объекты, находятся в namespace irr, т.е. если вы хотите обратится к какому-либо классу движка, то вам необходимо написать irr:: перед именем класса. Например чтобы использовать IrrlichtDevice необходимо написать irr::IrrlichtDevice. Чтобы избежать утомительного вбивания irr, мы заставим компилятор делать это за нас :). Необходимо написать следующий код:
//c++

using namespace irr;



Также в движке присутствует 5 namespaces второго уровня. Более подробно вы можете прочитать про них в документации. Чтобы не стать похожими на обязьян за печатными машинками и избавится от рутины, мы напишем следующий код:
//c++

using namespace core;

using namespace scene;

using namespace video;

using namespace io;

using namespace gui;



Он даёт компилятору указание подставлять что надо, где надо автоматически :) Чтобы использовать Irrlicht.dll мы должны прилинковать файл irrlicht.lib. Мы можем мучатся и прописывать пути к файлу ( как делал автор в самом начале :) ) А можем прямо в коде написать следующее:
//c++

#pragma comment(lib, "где_он_у_вас_установлен/Irrlicht.lib")

Эта строка даёт указание компилятору прилинковать файл "irrlicht.lib". Дальше. Необходимо ввести код главной функции. Я думаю лучше всего использовать main.
//c++

int main()

{



Самая важная функция в движке ( по крайней мере так думает Niko :) ) является "createDevice". С помощью этой функции инициализируется движок и создаётся самый главный объект движка, который является корневым и от него мы получаем все остальные объекты. У функции createDevice - 7 параметров:
deviceType: Типа устройства. В данный момент доступны Null device ( EDT_NULL ), Software device ( EDT_SOFTWARE ), DirectX8( EDT_DIRECTX8) , DirectX9.0c ( EDT_DIRECTX9 )и OpenGL ( EDT_OPENGL ).
windowSize: Размер окна для вывода изображения ( или разрешение, если включен полноэкранный режим ).
bits: Количество цветов. Сюда можно ставить либо 16, либо 32. Параметр игнорируется при оконном режиме.
fullscreen: параметр отвечает за полноэкранный режим
stencilbuffer: параметр отвечает за использование стенсил буфера.
vsync: параметр игнорируется при оконном режиме. Определяет будет ли FPS синхронизироваться с частотой обновления экрана.
eventReceiver: Объект для обработки событий, пока он нам не нужен, поставим 0.
//c++

IrrlichtDevice *device = createDevice(EDT_SOFTWARE, dimension2d(512, 384),
16, false, false, false, 0);



Теперь мы определим заголовок окна.
//c++


device.WindowCaption = "Hello World! - Irrlicht Engine Demo";


Теперь необходимо получить указатель на видео-драйвер ( IVideoDriver ), менеджер сцены ( ISceneManager ) и графический интерфейс ( IGUIEnvironment ), это делается для того, чтобы не писать постоянно device->getVideoDriver(), device->getSceneManager() и device->getGUIEnvironment().
//c++

IVideoDriver* driver = device->getVideoDriver();

ISceneManager* smgr = device->getSceneManager();

IGUIEnvironment* guienv = device->getGUIEnvironment();


Теперь мы добавим текст к окну используя IGUIEnvironment. Текст будет расположен на позиции (10,10) (левый верхний угол ) и (200,22) ( правый нижний угол ).
//c++

guienv->addStaticText(L"Hello World! This is the Irrlicht Software engine!",
rect(10,10,200,22), true);


Чтобы нарисовать что-нибудь интересное, мы загрузим Quake 2 модель ( .md2 ) и отобразим её. Мы получим от менеджера сцены указатель на объект и (getMesh()) прикрепим к SceneNode (Прим ечание переводчика: здесь я намеренно не стал переводит SceneNode, дословно это переводится как Узел сцены, что не даёт нам никакой информации. Я сам долго пытался понять что это за штука такая. Каждый объект (IMseh )имеет в движке свой Scene Node ( ISceneNode ) ( т.е. напрямую на IMesh нельзя воздействовать) , с помощью которого мы можем этот объект вертеть, перемещать, в общем производить какие-либо действия. IMesh служит только для загрузки объекта в память. А для отображения объекта на экране, необходимо создать этот самый Scene Node. В общем разберётесь, а если не разберётесь, то мне всегда можно написать на e-mail ) для того, чтобы отобразить объект на экране (addAnimatedMeshSceneNode()). Кроме .md2 моделей, движок может загружать .obj ( Maya ), .bsp ( Quake3 Map ), .ms3d ( Milkshape3D ), .x ( DirectX ) и что-то ещё :), подробнее в разделе возможности.


Модель Sydney была сделана человеком по имени Brian Collins.
//c++

IAnimatedMesh* mesh = smgr->getMesh("../../media/sydney.md2");

IAnimatedMeshSceneNode* node = smgr->addAnimatedMeshSceneNode( mesh );


Чтобы моделька выглядела чуть лучше, мы немного изменим её свойства: отключим у модельки освещение ( Примечание переводчика: т.е. она будет выглядеть так, как будто её освещают со всех сторон - никаких теней, она буде полностью освещена. Я понимаю, это странно звучит, но у автора написано именно disable lighting, кому надо, тот поймёт :) ) Затем мы заставим Sydney дрыгать ручками и ножками, для этого будем циклично проигрывать кадры от 0 до 310.И в самом конце натянем на модельку текстуру, чтобы девушка, была похожа на девушку.
//c++

if (node)

{

node->setMaterialFlag(EMF_LIGHTING, false);

node->setFrameLoop(0, 310);

node->setMaterialTexture( 0, driver->getTexture("../../media/sydney.bmp") );

}




Чтобы узреть объект, нам необходимо добавить камеру в позицию (0, 10, -40). Их этого места камера будет смотреть на точку (0,5,0).
//c++

smgr->addCameraSceneNode(0, vector3df(0,30,-40), vector3df(0,5,0));


Ура, мы загрузили всё что грузится и добавили, всё что надо было, теперь давайте всё это нарисуем. Мы организуем цикл, который будет работать до тех пор, пока мы не захлопнем устройство ( irrlichtDevice ) ( программно, через Ctrl-Alt-Del либо просто закроем окошко, не важно )
//c++

while(device->run())

{


Всё должно отрисовываться между командами SceneManager beginScene() и endScene() call. beginScene очищает экран заданным цветом а также depth buffer, если это необходимо. Затем мы позволим SceneManager ( Менеджер сцены ) и GUI Environment ( интерфейс пользователя ) отрисовать всё, что необходимо. По команде endScene() отрисовка закончится и всё, наконеч то :), вылезет на экран..
//c++

driver->beginScene(true, true, SColor(0,200,200,200));


smgr->drawAll();
guienv->drawAll();

driver->endScene();
}


После того, как нам надоест созерцать дрыгающуюся модельку, нам желательно уничтожить IrrlichtDevice. Делается это функцией drop(). Такая функция есть почти у каждого объекта в Irrlicht. Смотрите документацию для более подробной информации.
//c++

device->drop();

return 0;
}


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

Автор: Nikolaus "Niko" Gebhardt

Перевёл: Панченко "Andrushka" Андрей.

Информация взята с сайта
http://www.gamedev.ru

Категория: Из интернета | Добавил: Admin (31.12.2007)
Просмотров: 974 | Рейтинг: 0.0/0 |
Всего комментариев: 0
Форма входа
Поиск
Друзья сайта
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Copyright MyCorp © 2024Бесплатный конструктор сайтов - uCoz