Skip to main content

History: BasicTutorial8Source

Source of version: 2

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