本例我们来演示一下如何使用.irr文件。

/*

译者注:研究本例者请务必查看example.irr文件。
从1.1版本开始,Irr引擎就支持使用.irr文件来读取和保存一个完整的场景。
实际上,这个irr文件就是一个xml格式的配置文件,我们可以通过记事本打开它看看。

不过有一个更好的专门的编辑器,叫IrrEdit,请从http://www.ambiera.com/irredit 这里进行下载。这个编辑器甚至可以进行肩负起场景编辑器和粒子编辑器的功能。

不过我们不讲述编辑器,本例我们来演示一下如何使用.irr文件。

首先,我们创建一个窗口和Irr设备。
*/

#include <irrlicht.h>
#include <iostream>
using namespace irr;

#pragma comment(lib, "Irrlicht.lib")

int main()
{
// 让用户创建设备

video::E_DRIVER_TYPE driverType;

printf("Please select the driver you want for this example:\n"\
   " (a) Direct3D 9.0c\n (b) Direct3D 8.1\n (c) OpenGL 1.5\n"\
   " (d) Software Renderer\n (e) Burning's 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* device =
   createDevice(driverType, core::dimension2d<s32>(640, 480));

if (device == 0)
   return 1;

device->setWindowCaption(L"Load .irr file example");

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

/*
现在我们读取一个.irr文件。irr文件能够存储整个场景的材质,纹理,粒子系统等信息。
同时也可以存储场景中的所有场景接点和用户数据。
我们为了使例子简单些,我简单的读取一下场景。想获取更多信息的话,可以看文档中
关于ISceneManager::loadScene和ISceneManager::saveScene的说明。
我们这里仅读取显示一个场景,所以仅需要使用loadScene()函数。
*/

// 读取一个场景

smgr->loadScene("../../media/example.irr");

/*
这样就OK了,完成了!我们仅需要再增加一个摄象机,绘制场景就行了
*/

//增加一个FPS摄象机

smgr->addCameraSceneNodeFPS();

// 绘制一切

int lastFPS = -1;

while(device->run())
if (device->isWindowActive())
{
   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"Load Irrlicht File example - Irrlicht Engine [";
    str += driver->getName();
    str += "] FPS:";
    str += fps;

    device->setWindowCaption(str.c_str());
    lastFPS = fps;
   }

}

device->drop();

return 0;
}