기초 튜토리얼 8-1

Ogre3D 삽질란/Basic Tutorial 8 2008. 12. 5. 10:37

기초 튜토리얼 8 (번역 : n_Sys)

입문자 튜토리얼 8: 다중 Scene Manager 다루기

튜토리얼 진행중 문제가 발생한다면 Help 포럼 문의하세요.

Contents

                               1 소개

                               2 미리 준비해야할

                               3 프로그램 설정

                                       3.1 SceneManager 생성

                                       3.2 Camera 생성

                                       3.3 Viewport 생성

                                       3.4 Scene 생성

                               4 기능 추가하기

                                       4.1 듀얼 SceneManager

                                       4.2 SceneManager 서로 바꾸기

                               5 결론

                                       5.1 Overlays

                                       5.2 One Last Note

 

소개

이번 간략한 튜토리얼에서는 어떻게 다수의 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;

}

컴파일이 제대로 되는지 확인은 하시되 지금시점에서 실행은 되지않으므로 에러가 없다면 넘어갑니다.

 

: