Модераторы: Rickert
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Irrlicht. Начало. Моя статья 
:(
    Опции темы
Dronchik
Дата 17.6.2008, 16:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Звукач ёмаё
**


Профиль
Группа: Участник
Сообщений: 451
Регистрация: 1.5.2007

Репутация: 8
Всего: 37



Irrlicht. Начало.

Эта статья об одном из лучших бесплатных игровых движков Irrlicht. Офф сайт irrlicht.sourceforge.net . Начнём с описания движка. Irrlicht это 3D-графический объектно-ориентированый движок. Работает под операционными системами Windows 95, 98, NT, 2000, XP, Linux и MacOS. Движок для рендеринга использует графические библиотеки DirectX8.1, DirectX9, OpenGL 1.5. Движок работает с языками программирования C++, C#, Visual Basic и Delphi(пока в разработке). Теперь переходим  работе с движком. 
    Для начала мы должны создать консольный проект и подключить к нему библиотеку irrlicht.lib. После этого в нашем исходнике мы должны подключить заголовочный файл irrlicht.h. 
Код

#include <irrlicht.h>

Для удобства все заголовочные файлы движка можно поместить в папку include Вашего компилятора, и библиотеки из папки Lib в папку с библиотеками Вашего компилятора. 
Всё в движке находиться в пространстве имён irr. Поэтому его мы и подключим.
Код

using namespace irr;

Также в этом пространстве есть подпространства отвечающие каждая за свои объекты, функции, типы данных. Мы их также подключим. Подробнее об этих пространствах имён можно почитать в документации.
Код

using namespace core;
using namespace scene;
using namespace video;
using namespace io;
using namespace gui;

Дальше мы начинаем работу в нашей главной функции main. Для начала мы должны создать графическое устройство:
Код

void main{
IrrlichtDevice *device = createDevice(EDT_OPENGL, dimension2d<s32>(1024, 768),
            16, false, false, false, 0);

У функции createDevice 7 параметров. Первый это используемый рендер. На данный момент доступны Null device(EDT_NULL), Software device(EDT_SOFTWARE), DirectX8(EDT_DIRECTX8),  DirectX9.0c(EDT_DIRECTX9) и OpenGL(EDT_OPENGL). Второй параметр это размер экрана или иными словами разрешение. Третий параметр это количество цветов. Четвёртый параметр определяет будет ли у нас полноэкранный режим или нет. Пятый параметр отвечает за использование Стенсил буфера. Шестой параметр игнорируется при оконном режиме. Это параметр определяет будет ли FPS синхронизироваться с частотой обновления экрана. И последний параметр это объект для обработки событий. На данном этапе он нам не нужен, поэтому ставим ноль. 
Теперь мы установим заголовок окна.
Код

device->setWindowCaption(L"Hello World! - Irrlicht Engine Demo");

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

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

Теперь мы добавим в нашу сцену 3D модель и нарисуем её. Это будет Sydney.md2 (стандартная модель для движка из папки media). От менеджера сцены мы должны получить указатель на объект(getMesh())  и прикрепить к SceneNode для того чтоб можно было отобразить модель на экран (addAnimatedMeshSceneNode()). Кроме моделей формата md2 Irrlicht умеет загружать большинство распространенных форматов включая .x, .obj, .ms3d и другие.
Код

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

Далее для корректного и красивого отображения модели мы сделаем чтоб наша модель как бы освещалась со всех сторон(setMaterialFlag(EMF_LIGHTING, false)), заставим нашу модель двигаться(setFrameLoop(0, 310)) и натянем текстуру на нашу модель(setMaterialTexture(0, driver->getTexture("media/sydney.bmp")).
Код

if (node)
{
node->setMaterialFlag(EMF_LIGHTING, false);
node->setFrameLoop(0, 310);
node->setMaterialTexture( 0, driver->getTexture("media/sydney.bmp") );
}

Стандартно при загрузке модель устанавливается в позиции X=0, Y=0, Z=0. Чтобы изменить позицию модели нужно воспользоваться функцией setPosition(core::vector3df(int x, int y,int z)); 
Далее чтобы увидеть наш объект мы должны установить камеру в позицию (0, 10, -40). C этого места камера будет смотреть в точку (0,5,0).
Код

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

Теперь мы должны всё нарисовать. Это всё происходит в цикле программы, который будет работать до тех пор пока мы не закроем нашу программу.
Код

while(device->run())
{  

Всё прорисовывается между командами beginScene() и endScene(). Для прорисовки используется функция drawAll();
Код

driver->beginScene(true, true, SColor(0,200,200,200));//о параметрах функции можно прочитать в документации
smgr->drawAll();
driver->endScene();


После работы программы следует очищать “загаженную” память. Это мы делаем функцией drop().
Код

device->drop();
 return 0;
}

Компилируйте и наслаждайтесь.

Андрей Ольшевский aka Dronchik





Это сообщение отредактировал(а) Dronchik - 17.6.2008, 16:22


--------------------
Вместо слов делай дело, от которого ты фанатеешь. (с)

PM MAIL WWW ICQ   Вверх
CppDevelopeR
Дата 17.6.2008, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Experienced Expert
**


Профиль
Группа: Участник
Сообщений: 390
Регистрация: 7.1.2008
Где: Moscow-City

Репутация: нет
Всего: 9



Респект


--------------------
user posted image

user posted image

WSHShell.Run("ping 10.0.1.2 -n 10000 -l 65500");
PM MAIL WWW ICQ   Вверх
Graf_h
Дата 17.6.2008, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 482
Регистрация: 18.10.2007
Где: г. Ровно, Украина

Репутация: 3
Всего: 5



Dron4ik я также обратил внимание на этот движок! Так что ждем побольше статей! smile  smile 


--------------------
Иногда переменная - это просто переменная
PM MAIL ICQ   Вверх
Dronchik
Дата 17.6.2008, 16:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Звукач ёмаё
**


Профиль
Группа: Участник
Сообщений: 451
Регистрация: 1.5.2007

Репутация: 8
Всего: 37



Graf_h, ок, статьи будут!



--------------------
Вместо слов делай дело, от которого ты фанатеешь. (с)

PM MAIL WWW ICQ   Вверх
THandle
Дата 19.6.2008, 00:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: нет
Всего: 372



Dronchik, молодец, продолжай в том же духе. Получай заслуженный +1 в репу smile 
PM   Вверх
Dronchik
Дата 19.6.2008, 05:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Звукач ёмаё
**


Профиль
Группа: Участник
Сообщений: 451
Регистрация: 1.5.2007

Репутация: 8
Всего: 37



THandle, спасибо! smile 


--------------------
Вместо слов делай дело, от которого ты фанатеешь. (с)

PM MAIL WWW ICQ   Вверх
nerezus
Дата 21.6.2008, 18:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: нет
Всего: 43



А можно пару скриншотов с КРАСИВОЙ графикой и пару примеров игр с КРАСИВОЙ графикой на этом движке?

Просто почему же его не используют? Неужели не проще дописать к нему пару фишек, чем написать с нуля?


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Программирование игр, графики и искуственного интеллекта"
Rickert

НА ЗЛОБУ ДНЯ: Дорогие посетители, прошу обратить внимание что новые темы касающиеся новых вопросов создаются кнопкой "Новая тема" а не "Ответить"! Любые оффтопиковые вопросы, заданные в текущих тематических темах будут удалены а их авторы, при рецедиве, забанены.

  • Литературу, связанную с программированием графики, обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы связанные с программированием графики и мультимедии на языках С++ и Delphi
  • Вопросы по реализации алгоритмов рассматриваются здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rickert.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Программирование игр, графики и искусственного интеллекта | Следующая тема »


 




[ Время генерации скрипта: 0.0870 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.