15. LoadIrrFile

Posted 2007/09/15 22:11 by 수달

2006년 8월 6일 부로 1.1 버전과 irrEdit 0.3이 공개되었다.


이중 irrEdit은 씬노드를 만드는 툴로써 일종의 맵툴이라 할 수 있다.


물론 게임툴이라고 불릴 정도의 레벨 디자인이 가능한 툴은 아니고, 여러 그래픽 자원을 배치 할 수 있는 정도이다.


하지만 원래부터 IRRLICHT엔진은 그래픽 엔진임을 생각해야 한다.


고맙게도 이번 버전은 irrEdit의 전용 포맷인 *.irr에 대한 것이다.


irrEdit에 대한 좀 더 심도 있는 연구가 필요할 것 같다.


--------------------------------------------------------------------------------------

IRRLICHT 1.1버전부터 XML에 기반을 둔 *.irr 파일의 모든 그래픽스를 저장하고 읽을 수 있게 되었다. http://irredit.irrlicht3d.org를 참조하는 것이 좋겠다. 단순하게만 말하자면 *.irr를 만드는 irrEdit은 월드와 파티클 툴로써 사용할 수 있을 것이다. 이번 예제에서는 *.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) 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_SOFTWARE2;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을 문서(Irrlicht.chm)에서 찾아보길 바란다. 자, 여기서는 단지 loadScene()을 부르기만 하면 된다.

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


준비가 다 되었다. 카메라를 더하고 씬을 그려보자.


smgr->addCameraSceneNodeFPS();

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

device->drop();

return 0;
}


쉽지 않은가?


----------------------------------------------------------------------------------------

irrEdit과 *.irr가 얼마나 중대한 기점인지 느껴진다. 지금까지 작은 연습 프로젝트 하나 하려고 해도 직접 수작업을 해줬는데, 이제는 많은 부분을 툴에 넘겨 줄 수 있게 되었다. 실제 내가 참여중인 모종의 아마추어 프로젝트에서 요구된 애니메이션 월드, 파티클 시스템 등이 다 해결 될 것 같다. irrEdit이 아니었다면 이런 작업 툴 만드는데만 6개월은 넘게 걸렸을 것이다.


점점 더 멋진 엔진으로 발전하고 있는 IRRLICHT엔진과 개발자에게 감사한다.


+ Recent posts