기초 튜토리얼 8-1
Ogre3D 삽질란/Basic Tutorial 8 2008. 12. 5. 10:37
기초 튜토리얼 8 (번역 : n_Sys)
입문자 튜토리얼 8: 다중 Scene Manager 다루기
이 튜토리얼 진행중 문제가 발생한다면 Help 포럼 에 문의하세요.
Contents |
소개
이번 간략한 튜토리얼에서는 어떻게 다수의 scene manager 들을 서로 바꾸는지에 대한 내용을 다루게 됩니다.
이 튜토리얼에 대한 코드는 여기(http://www.ogre3d.org/wiki/index.php/BasicTutorial8Source)서 찾을 수 있습니다. 코드를 천천히 입력하면서 나오는 결과물을 직접 눈으로 확인하세요
미리 준비해야할 것
cpp파일을생성하고 다음 코드를 추가하세요 :
#include "ExampleApplication.h"
#define CAMERA_NAME "SceneCamera"
void setupViewport(RenderWindow *win, SceneManager *curr)
{
}
void dualViewport(RenderWindow *win, SceneManager *primary, SceneManager *secondary)
{
}
class SMTutorialListener : public ExampleFrameListener, public OIS::KeyListener
{
public:
SMTutorialListener(RenderWindow* win, SceneManager *primary, SceneManager *secondary)
: ExampleFrameListener(win, primary->getCamera(CAMERA_NAME), true, false),
mPrimary(primary), mSecondary(secondary), mDual(false), mContinue(true)
{
mKeyboard->setEventCallback(this);
}
bool frameStarted(const FrameEvent& evt)
{
mKeyboard->capture();
return mContinue;
}
bool keyPressed(const OIS::KeyEvent &arg)
{
switch (arg.key)
{
case OIS::KC_ESCAPE:
mContinue = false;
break;
default:
break;
}
return true;
}
bool keyReleased(const OIS::KeyEvent &) {return true;}
private:
SceneManager *mPrimary, *mSecondary;
bool mDual, mContinue;
static void swap(SceneManager *&first, SceneManager *&second)
{
SceneManager *tmp = first;
first = second;
second = tmp;
}
};
class SMTutorialApplication : public ExampleApplication
{
public:
SMTutorialApplication()
{
}
~SMTutorialApplication()
{
}
protected:
SceneManager *mPrimary, *mSecondary;
void chooseSceneManager(void)
{
}
void createCamera()
{
}
void createViewports()
{
}
void createScene(void)
{
}
void createFrameListener(void)
{
mFrameListener = new SMTutorialListener(mWindow, mPrimary, mSecondary);
mFrameListener->showDebugOverlay(true);
mRoot->addFrameListener(mFrameListener);
}
};
#if OGRE_PLATFORM == OGRE_PLATFORM_WIN32
#define WIN32_LEAN_AND_MEAN
#include "windows.h"
INT WINAPI WinMain(HINSTANCE hInst, HINSTANCE, LPSTR strCmdLine, INT)
#else
int main(int argc, char **argv)
#endif
{
// Create application object
SMTutorialApplication app;
try {
app.go();
} catch(Exception& e) {
#if OGRE_PLATFORM == OGRE_PLATFORM_WIN32
MessageBoxA(NULL, e.getFullDescription().c_str(), "An exception has occurred!", MB_OK | MB_ICONERROR | MB_TASKMODAL);
#else
fprintf(stderr, "An exception has occurred: %s\n",
e.getFullDescription().c_str());
#endif
}
return 0;
}
컴파일이 제대로 되는지 확인은 하시되 지금시점에서 실행은 되지않으므로 에러가 없다면 넘어갑니다.