Среда, 21.11.2018, 17:00
Мир Irrlicht
Главная | Форум | Статьи | Файлы | Регистрация | Вход
Меню сайта
Категории каталога
Для начинающих [5]
Наш опрос
За последний год вам довелось что-либо писали на:
Всего ответов: 437
Главная » Статьи » Для начинающих

Quake3Map
В самом начале необходимо подключить заголовочный файл Irrlicht'а и файл работы с консолью:

#include <irrlicht.h>
#include <iostream>

Далее говорим, что мы будем использовать пространство имён "irr", которое включает в себя подпространства "core", "scene", "video", "io" и "gui":

using namespace irr;

Это даёт нам возможность не писать длинные конструкции типа irr:...
В нашем приложении мы пользуемся библиотекой Irrlicht.DLL, поэтому необходимо слинковать Irrlicht.lib. Это можно сделать в свойствах проекта, но мы сделаем это с помощью директивы pragma comment:

#ifdef _MSC_VER
#pragma comment(lib, "Irrlicht.lib")
#endif

Хорошо. Теперь можно приступить, собственно, к написанию программы. Прежде всего нужно написать функцию, с которой программа начнёт своё выполнение. Напиание этой функции как раз и займёт оставшуюся часть урока:

int main()
{

Далее мы создадим IrrlichtDevice с помощью функции createDevice() и выберем тип драйвера:

//Выбираем тип драйвера

video::E_DRIVER_TYPE driverType = video::EDT_DIRECT3D9;

printf("Please select the driver you want for this example:\n"\
" (a) Direct3D 9.0c\n (b) Direct3D 8.1\n © OpenGL 1.5\n"\
" (d) Software Renderer\n (e) Apfelbaum Software Renderer\n"\
" (f) NullDevice\n (otherKey) exit\n\n");

char i;
std::cin >> i;

switch(i)
{
case 'a': driverType = video::EDT_DIRECT3D9;break;
case 'b': driverType = video::EDT_DIRECT3D8;break;
case 'c': driverType = video::EDT_OPENGL; break;
case 'd': driverType = video::EDT_SOFTWARE; break;
case 'e': driverType = video::EDT_BURNINGSVIDEO;break;
case 'f': driverType = video::EDT_NULL; break;
default: return 1;
}

// создаём устройство IrrlichtDevice и выходим, если создание не удалось

IrrlichtDevice *device =
createDevice(driverType, core::dimension2d<s32>(640, 480));

if (device == 0)
return 1;

Для работы программы нам понадобятся указатели на драйвер видео и на менеджер сцены. Их мы можем получить с помощью методов Device->getVideoDriver() и device->getSceneManager():

video::IVideoDriver* driver = device->getVideoDriver();
scene::ISceneManager* smgr = device->getSceneManager();

Для того, чтобы приступить к показу карты Quake 3 нам необходимо загрузить её. Карта Quake 3 запакована в файл формата .pk3, который ничем не отличается от формата .zip. Мы добавим файл формата .pk3 в нашу файловую систему:

device->getFileSystem()->addZipFileArchive("../../media/map-20kdm2.pk3");

Загрузим mesh с помощью метода getMesh(). Можно заметить, что в итоге мы получим анимированный mesh, когда карты Quake 3 содержат в себе только статичную геометрию. Не беспокойтесь, мы получим анимированный mesh в котором только один первый frame (кадр) и это не вызовет никакой ошибки:

scene::IAnimatedMesh* mesh = smgr->getMesh("20kdm2.bsp");

Далее при создании SceneNode'а у нас есть два выбора. Либо создать оптимизированный для быстрой отрисовки SceneNode методом smgr->addOctTreeSceneNode() или неопримизированный методом addAnimatedMeshSceneNode().
addOctTreeSceneNode() говорит программе, чтобы геометрия в созданном SceneNode'е отсекалась, если она не видна, причём по специальному оптимизированному алгоритму:

scene::ISceneNode* node = 0;

if (mesh)
node = smgr->addOctTreeSceneNode(mesh->getMesh(0));

Так как геометрия создаётся в позиции (0,0,0), мы сдвинем её так, как нам надо:

if (node)
node->setPosition(core::vector3df(-1300,-144,-1249));

Чтобы просматреть карту Quake 3, нам понадобиться камера. Мы легко сможем создать камеру в стиле Maya методом addCameraSceneNodeMaya() или камеру в стиле игр жанра FPS методом addCameraSceneNodeFPS():

smgr->addCameraSceneNodeFPS();

Скроем курсор, чтобы не мешал:

device->getCursorControl()->setVisible(false);

Теперь осталось только нарисовать геометрию. Также будем выводить значение FPS:

int lastFPS = -1;

while(device->run())
{
driver->beginScene(true, true, video::SColor(0,200,200,200));
smgr->drawAll();
driver->endScene();

int fps = driver->getFPS();

if (lastFPS != fps)
{
core::stringw str = L"Irrlicht Engine - Quake 3 Map example [";
str += driver->getName();
str += "] FPS:";
str += fps;
device->setWindowCaption(str.c_str());
lastFPS = fps;
}
}

И в конце удалим устройство Irrlicht'а:

device->drop();
return 0;
}

Всё. Теперь можно приступить к компиляции. В итоге мы должны увидеть, что то типа этого:



Источник: http://irrlicht.sourceforge.net/docu/example002.html

Категория: Для начинающих | Добавил: hero (10.02.2009) | Автор: Константин Hero
Просмотров: 2411 | Рейтинг: 4.6/5 |

Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа
Поиск
Друзья сайта
Статистика
Copyright MyCorp © 2018 Создать бесплатный сайт с uCoz