Skip to main content

History: BasicTutorial8Source

Source of version: 4

Copy to clipboard
            This is the full source for ((Basic Tutorial 8))
{CODE(wrap="1",colors="c++")}
#include "ExampleApplication.h"
#define CAMERA_NAME "SceneCamera"

void setupViewport(RenderWindow *win, SceneManager *curr)
{
    win->removeAllViewports();

    Camera *cam = curr->getCamera(CAMERA_NAME);
    Viewport *vp = win->addViewport(cam);

    vp->setBackgroundColour(ColourValue(0,0,0));
    cam->setAspectRatio(Real(vp->getActualWidth()) / Real(vp->getActualHeight()));
    vp->setOverlaysEnabled(true);
}

void dualViewport(RenderWindow *win, SceneManager *primary, SceneManager *secondary)
{
    win->removeAllViewports();

    Viewport *vp = 0;
    Camera *cam = primary->getCamera(CAMERA_NAME);
    vp = win->addViewport(cam, 0, 0, 0, 0.5, 1);
    vp->setBackgroundColour(ColourValue(0,0,0));
    vp->setOverlaysEnabled(true);
    cam->setAspectRatio(Real(vp->getActualWidth()) / Real(vp->getActualHeight()));

    cam = secondary->getCamera(CAMERA_NAME);
    vp = win->addViewport(cam, 1, 0.5, 0, 0.5, 1);
    vp->setBackgroundColour(ColourValue(0,0,0));
    cam->setAspectRatio(Real(vp->getActualWidth()) / Real(vp->getActualHeight()));
    vp->setOverlaysEnabled(false);
}

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_C:
            swap(mPrimary, mSecondary);

            if (mDual)
                dualViewport(mWindow, mPrimary, mSecondary);
            else
                setupViewport(mWindow, mPrimary);
            break;

        case OIS::KC_V:
            mDual = !mDual;

            if (mDual)
                dualViewport(mWindow, mPrimary, mSecondary);
            else
                setupViewport(mWindow, mPrimary);

            break;

        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)
    {
        mPrimary = mRoot->createSceneManager(ST_GENERIC, "primary");
        mSecondary = mRoot->createSceneManager(ST_GENERIC, "secondary");
    }

    void createCamera()
    {
        mPrimary->createCamera(CAMERA_NAME);
        mSecondary->createCamera(CAMERA_NAME);
    }

    void createViewports()
    {
        setupViewport(mWindow, mPrimary);
    }

    void createScene(void)
    {
        // Setup the TerrainSceneManager
        mPrimary->setSkyBox(true, "Examples/SpaceSkyBox");

        // Setup the Generic SceneManager
        mSecondary->setSkyDome(true, "Examples/CloudySky", 5, 8);
    }

    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;
}
{CODE}
        

History

Information Version
Sun 08 of Aug, 2010 11:01 GMT-0000 Jahren 5
Fri 29 of Jan, 2010 04:38 GMT-0000 peters remove extra space at column 0 4
Mon 04 of Jan, 2010 05:24 GMT-0000 jacmoe 3
Sun 06 of Dec, 2009 11:42 GMT-0000 jacmoe 2
Sun 12 of Oct, 2008 10:41 GMT-0000 OgreWikiBot Robot: Cosmetic changes 1