알라딘MGG와이드바


오우거로 만든 첫 번째 프로그램 - Starwars intro 개발 이야기

TorchLight 가 오우거로 만들었다길래 Tutorial 을 보다가 처음으로 만들어 본 프로그램입니다.
중급 튜토리얼 7: 텍스쳐에 렌더링하기 에 MovablePlane 이 나와서 좀 고쳐서 만들어 봤는데요,
클라이언트 쪽은 처음 해 보는 거라 여기저기 코드 뜯어와서 만들었습니다만, 개인적으로는 맘에 드네요. :)
텍스처 이미지는 Gimp 로 편집했고, 동영상은 CamStudio팟인코더로 만들었습니다.




#include "ExampleApplication.h"

class RTTListener : public ExampleFrameListener {
public:
RTTListener(RenderWindow *win, Camera *cam, SceneNode *sn)
: ExampleFrameListener(win, cam), mPlaneNode(sn)
{
showDebugOverlay(false);
}

bool frameStarted(const FrameEvent& evt) {
mPlaneNode->translate(Vector3(0.0, 0.0, 0.05), Ogre::Node::TS_LOCAL);
return ExampleFrameListener::frameStarted(evt);
}

protected:
SceneNode *mPlaneNode;
};

class RTTApplication : public ExampleApplication
{
protected:
MovablePlane *mPlane;
Entity *mPlaneEnt;
SceneNode *mPlaneNode;

void createScene() {
mSceneMgr->setAmbientLight(ColourValue::White);

Light* l = mSceneMgr->createLight("MainLight");
l->setPosition(0, 0, 0);

mCamera->setPosition(0, 120, -400);
mCamera->lookAt(0, 0, 0);

MaterialPtr mat = MaterialManager::getSingleton().create(
"BoardMat", ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME);
mat->setSceneBlending(Ogre::SBT_TRANSPARENT_ALPHA); // 텍스처 알파 채널 활성화

Pass* pPass = mat->getTechnique(0)->getPass(0);
// gimp 로 alpha 들어있는 png 생성
TextureUnitState* t = pPass->createTextureUnitState("starwars.png");
t->setTextureAddressingMode(TextureUnitState::TAM_CLAMP);
t->setTextureFiltering(FO_ANISOTROPIC, FO_ANISOTROPIC, FO_LINEAR);

mPlane = new MovablePlane("Plane");
mPlane->d = 0;
mPlane->normal = Vector3::UNIT_Y;
MeshManager::getSingleton().createPlane(
"PlaneMesh", ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, *mPlane,
200, 1000, 1, 1, true, 1, 1, 1, Vector3::UNIT_Z);
mPlaneEnt = mSceneMgr->createEntity("PlaneEntity", "PlaneMesh");
mPlaneEnt->setMaterialName("BoardMat");

mPlaneNode = mSceneMgr->getRootSceneNode()->createChildSceneNode();
mPlaneNode->attachObject(mPlaneEnt);
mPlaneNode->setPosition(0, 0, -800);

Plane plane;
plane.d = 1000;
plane.normal = Vector3::NEGATIVE_UNIT_Z; // 왜 +z 가 아니고, -z 이지?
// Examples/SpaceSkyPlane 은 Example.material 파일에 정의되어 있다.
//mSceneMgr->setSkyPlane(true, plane, "Examples/SpaceSkyPlane", 1500, 75);
mSceneMgr->setSkyPlane(true, plane, "Examples/SpaceSkyPlane1", 1500, 200);
}

void createFrameListener() {
mFrameListener = new RTTListener(mWindow, mCamera, mPlaneNode);
mRoot->addFrameListener(mFrameListener);
}

virtual bool configure() {
if (!mRoot->restoreConfig()) { // orge.cfg 필요
if (!mRoot->showConfigDialog()) {
return false;
}
}

mWindow = mRoot->initialise(true);
return true;
}
};

INT WINAPI WinMain(HINSTANCE hInst, HINSTANCE, LPSTR lpCmdLine, int) {
RTTApplication app;
try {
app.go();
}
catch (Exception& e) {
MessageBoxA(NULL, e.getFullDescription().c_str(), "An exception has occurred!",
MB_OK | MB_ICONERROR | MB_TASKMODAL);
}

return 0;
}


덧글

  • 케인 2010/03/31 16:19 # 답글

    저도 예전에 학교에서 전략시뮬레이션 만들때 오우거를 썼는데, 클라이언트 플머가 말하길 괜찮은 프로그램이라고 하더라구요.
    그 친구는 그때 오우거를 다룬 경험으로 현재 있는 회사에서도 오우거를 만지고 있더랍니다. 앞으로 자기가 만들 게임이 모두 오우거였으면 한다는 말도 ㅁㄴㅇㄹ
  • 박PD 2010/03/31 16:51 #

    컨텐츠 로직을 깔끔하게 만들 수 있는 게 좋을 거 같습니다. 좀 더 해 보면 안 좋은 부분도 보이겠지만요.
댓글 입력 영역


Yes24위대한게임의탄생3

위대한 게임의 탄생 3
예스24 | 애드온2