irrlicht之14.Win32Window
本例我们来演示一下如何使用.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;
}