1. Hello World
Posted 2007/09/15 19:14 by 수달튜토리얼 1 : HellowWorld
이 튜토리얼은 IRRLICHT 엔진을 사용하는 IDE 셋업 방법과 그것을 이용해 간단한 HelloWorld 프로그램을 만드는 법을 보여준다. 이 프로그램은 비디오 드라이버 기본 생성과 GUI환경, 그리고 SceneManager 기초를 보여준다. 그 결과의 예는 다음과 같다.
- IDE 셋업하기
엔진을 사용하기 위해서, 우리는 헤더 파일 <irrlicht.h>을 포함하는것을 할것이고, Irrlicht Engine SDK 디렉토리 \include에서 찾을수 있다. 컴파일러를 가게하는것은 이 헤더파일을 찾는다, 위치를 알아낸 디렉토리는 어디에서나 명시되야한다. 이것은 모든 IDE 와 컴파일러를 위해 다르다. 나는 Microsoft Visual Studio C++ 6.0과 .NET에서 이것의 사용법을 설명할 것이다.
* 만약 당신이 버젼 6.0을 사용한다면, Menu Extras -> Options 를 선택한다. directories tab 를 선택하고 콤보박스에서 'Include'항목을 선택하라. 일리히트 엔진의 \include 디렉토리를 디렉토리들의 리스트에 추가하라. 이제 컴파일러는 Irrlicht.h 헤더파일을 찾을것이다. 우리들은 또 목록에 나열된 irrlicht.lib의 위치를 필요로 하기때문에, Libraries'탭을 선택하고,\lib\VisualStudio 디렉토리를 추가하라.
* 만약 당신의 IDE가 Visual Studio .NET 이라면, Tools -> Options 선택한다. Projects entry 를 선택한다음 VC++ directories를 선택한다. 콤보박스에서 'show directories for include files' 를 선택하고, 일리히트 엔진 폴더의 디렉토리 \include 에서 디렉토리들의 리스트로 추가한다.
이와같이 하면 컴파일러는 Irrlicht.h헤더파일을 찾을 것이다. 우리는 또 irrlicht.lib 찾는것이 필요하기때문에, 'show directories for Library files' 를 선택하고, \lib\VisualStudio 디렉토리를 추가합니다.
---------------------------------------------------------------------------
시작
----
경로를 설정하면 컴파일러는 IRRLICHT를 사용할 수 있게 된다.
#include <irrlicht.h>
IRRLICHT 엔진에선 irr란 네임스페이스로 모든 것을 사용할 수 있다. IRRLICHT의 클래스를 사용하고 싶다면, 해당 클래스 이름 앞에 irr::를 붙이면 된다. 예를 들어 IrrlichtDevice를 사용하고 싶다면 irr:IrrlichtDevice라고 쓰면 된다. 모든 클래스에 irr::를 사용하기 위해, 우리는 컴파일러에게 사용할 네임 스페이스를 알려줘야 한다.
using namespace irr;
IRRLICHT 엔진에는 5개의 서브 네임 스페이스가 있다. 이것은 IRRLICHT 공식 포럼 상단의 Namespace List를 클릭해 보면 상세히 알 수 있을 것이다. 이번 예제에선 간편함을 위해 특별히 정한 서브 네임 스페이스를 사용하진 않는다.
using namespace core;
using namespace scene;
using namespace video;
using namespace io;
using namespace gui;
Irrlicht.Dll 파일을 사용하기 위해, 이에 대한 링크가 필요하다. 우리는 이 옵션을 프로젝트 세팅(컴파일러의)에서 설정할 수 있다. 하지만 여기선 쉽게 하기 위해 pragma 문법으로 처리했다.
#pragma comment(lib, "irrlicht.lib")
이제 메인 함수(엔트리)다. 간단한 예를 위해 어떤 플랫폼에서나 가능한 void main()을 사용했다. 만약 윈도 플랫폼이라면 WinMain()을 사용할 수 있다.
int main()
{
엔진에서 가장 중요한 함수는 'createDevice'함수다. 엔진의 모든 일을 처리하는 루트 객체(the root object)인 IRRLICHT Device는 이 함수를 통해 만들어진다. createDevice()는 7개의 인자를 가진다.
- deviceType : 디바이스의 타입. 이것은 현재 Null device, Software Device, DirectX8/9, OpenGL등을 사용한다. 이 예에서는 EDT_SOFTWARE를 사용했다. 물론 EDT_NULL, EDT_DIRECTX8, EDT_OPENGL 등을 사용할 수 있다.
- windowSize : 윈도 크기나 풀스크린시 크기다. 예제에선 512 * 384를 사용한다.
- bits : 풀스크린 모드에서의 픽셀 당 비트 수다. 이는 16, 32 중 하나로 윈도 모드에선 무시된다.
- fullscreen : 장치를 풀스크린으로할지, 아닐지 결정.
- stencilbuffer : 그림자를 그리는데 스텐실 버퍼를 사용할지, 아닐지 결정.
- vsync : vsync가 가능하게 할지, 아닐지 결정. 풀스크린에서만 적용된다.
- eventReceiver : 이벤트를 받을 객체. 여기서는 사용하지 않을 것으로 0(=NULL)로 정했다.
IrrlichtDevice * device =
createDevice(EDT_SOFTWARE, dimension2d<s32>(512, 384), 16,
false, false, false, 0);
일단 윈도 캡션에 적절한 텍스트를 설정한다. 문자열 앞에 'L'이 있음을 주지하라. IRRLICHT 엔진은 문자열(wide character strings : WSZ-) 처리할 때 이 형식을 사용한다.
device->setWindowCaption(L"Hello World! - Irrlicht Engine Demo");
다음으로 비디오 드라이버와 씬매니저, GUI환경을 얻기 위한 포인터를 디바이스에서 얻어 기억해 둔다.
IVideoDriver * driver = device->getVideoDriver();
ISceneManager * smgr = device->getSceneManager();
IGUIEnvironment * guienv = device->getGUIEnvironment();
GUI 환경을 이용해 윈도 화면에 Hello World 라벨을 하나 넣어보자. 텍스트는 좌상단 (10, 10)에 위치해 우하단(200, 22)까지 자리를 잡는다.
guienv->addStaticText(L"Hello World! this is the Irrlicht Software Engine!",
rect<int>(10, 10, 200, 22), true);
흥미를 위해, 퀘이크 2 모델을 읽고 화면에 보이도록 하겠다. 우리는 단지 씬매니저의 getMesh()를 사용해 모델 메시를 읽을 것이고, addAnimatedMeshSceneNode()를 이용해 메시를 SceneNode에 추가 할 것이다. 퀘이크 2 파일(.md2)를 읽는 대신, 마야 목적파일(.obj), 퀘이크 3 맵(.bsp), 밀크쉐이프3D의(.ms3d)를 읽을 수도 있다. (참고로 여기서 사용할 sydney.md2는 브라이언 콜린스에 의해 만들어 졌다.)
IAnimatedMesh * mesh = smgr->getMesh("../../media/sydney.md2");
IAnimatedMeshSceneNode * node = smgr->addAnimatedMeshSceneNode(mesh);
모델 매터리얼(재질)을 살짝 조절해야 한다. 이렇게 안 하면 이 예제에선 다이나믹 라이트를 사용하지 않았기 때문에 모델이 시커멓게 보일 것이다. 그리고 애니메이션이 0에서 310 프레임으로 반복하도록 설정하자. 마지막으로 텍스쳐를 모델에 적용해 보자.
if(node)
{
node->setMaterialFlag(EMF_LIGHTING, false);
node->setFrameLoop(0, 310);
node->setMaterialTexture(0, driver->getTexture("../../media/sydnet.bmp"));
}
메시를 보기 위해 카메라를 3D 공간인 (0, 0, -40)에 위치시킨 후 지향점을 (0, 5, 0)에 둔다.
smgr->addCameraSceneNode(0, vector3df(0, 30, -40), vector3df(0, 5, 0));
자, 이제, 씬을 모두 설정했으니 화면에 그려보자! 디바이스를 while() 루프에 넣고, 끝날 때까지 계속 돌려보자. 사용자가 윈도를 닫거나 ALT+F4를 누를 때까지 반복 될 것이다.
while(device->run())
{
모든 것은 beginScene()과 endScene() 사이에서 그려진다. beginScene()은 한 색으로 화면을 청소하며, 원한다면 뎁스 버퍼(the depth buffer) 역시 클리어 한다. 여기에 씬매니저와 GUI 환경을 갖고 해당 내용을 그린다. endScene()이 불리면 화면에 현재 내용을 출력한다.
driver->beginScene(true, true, SColor(0, 200, 200, 200));
smgr->drawAll();
guienv->drawAll();
driver->endScene();
}
모든 것이 종료되면, createDevice()로 만들어졌던 Irrlicht Device를 제거해 줘야 한다. IRRLICHT 엔진에서는 create로 시작한 함수로 만든 모든 객체를 반드시 제거해야 하는데 간단히 ->drop()을 호출하면 된다. 이에 대해선 다른 문서를 참조하라.
device->drop();
return 0;
}
이제 컴파일 하고, 실행하라.
--------------------------------------------------------------------------
제대로 되었는지 모르겠지만 계속해보자.
'기본 카테고리' 카테고리의 다른 글
Irricht엔진튜토리얼 03. Custom Scene Node (0) | 2009.03.19 |
---|---|
Irricht엔진튜토리얼 02. Quake 3 Map (0) | 2009.03.19 |
Equipment Damage Curves Cables , 단시간 허용전류2 (0) | 2009.03.19 |
Equipment Damage Curves Conductors, 단시간 허용전류 (0) | 2009.03.19 |
수치해석학 (0) | 2009.03.18 |