OGRE/kody/MyApp3.ccp

Z Wikibooks, biblioteki wolnych podręczników.
#define OGRE_CHANGE1 ((1 << 16) | (1 << 8)) /* Przeznaczone do wykrywania wersji Ogre */

#include "Ogre.h"     /* Wszystkie nagłówki OGRE */
#include "ExampleApplication.h"

#if OGRE_PLATFORM == OGRE_PLATFORM_WIN32   /* W zależności od systemu operacyjnego */
#define WIN32_LEAN_AND_MEAN
#include "windows.h"
#else
#include <iostream>
#endif

// Dziedziczymy ExampleApplication
class MyApp : public ExampleApplication
{
 protected:
 public:
   MyApp()
   {
   }

   ~MyApp() 
   {
   }
 protected:
   // Tworzenie Menadżera Sceny
   void chooseSceneManager(void)
   {
#if OGRE_VERSION < OGRE_CHANGE1
      mSceneMgr = mRoot->getSceneManager(ST_EXTERIOR_CLOSE);
#else
      mSceneMgr = mRoot->createSceneManager(ST_EXTERIOR_CLOSE, "TerrainSceneManager");
#endif
   }

   /** createScene jest funkcją czysto wirtualną w ExampleApplication,
    *  nadpisujemy ją, aby nic nie robiła.
    *  Na początku tworzy ona pustą scenę.
    **/
   void createScene(void)
   {
         //3.1 Mgła - odkomentuj trzy kolejne linie
         //ColourValue fadeColour( 0.9, 0.9, 0.9 );
         //mWindow->getViewport(0)->setBackgroundColour( fadeColour );
         //mSceneMgr->setFog( FOG_LINEAR, fadeColour, 0.0, 50, 500 );
         //3.2 Mgły wykładnicze - zakomentuj linię wyżej, odkomentuj jedną z dwóch poniżej
         //mSceneMgr->setFog( FOG_EXP, fadeColour, 0.005 );
         //mSceneMgr->setFog( FOG_EXP2, fadeColour, 0.003 );

         //4.1 Mgła i niebo - zakomentuj wszystkie linie od 3.1 i odkomentuj trzy poniższe, oraz zmień plane.d i setSkyPlane
         //ColourValue fadeColour( 0.9, 0.9, 0.9 );
         //mSceneMgr->setFog( FOG_LINEAR, fadeColour, 0.0, 50, 515 );
         //mWindow->getViewport(0)->setBackgroundColour( fadeColour );

         //5.1 Mgła jako ciemność - zakomentuj wszystkie linie od 3.1 i odkomentuj trzy poniższe, oraz zmień plane.d i setSkyPlane
         //ColourValue fadeColour( 0.1, 0.1, 0.1 );
         //mWindow->getViewport(0)->setBackgroundColour( fadeColour );
         //mSceneMgr->setFog( FOG_LINEAR, fadeColour, 0.0, 10, 150 );

         //1.1 Dodanie terenu do sceny
         mSceneMgr->setWorldGeometry( "terrain.cfg" );
         //Poprawienie ustawienia kamery
         mCamera->setPosition( 500.0f, 90.0f, 500.0f );

         //2.1 Sky Box - kompilujemy tylko z jedną odkomentowaną linią z czterech kolejnych
         //mSceneMgr->setSkyBox( true, "Examples/SpaceSkyBox" );
         //mSceneMgr->setSkyBox( true, "Examples/SpaceSkyBox", 10 ); //Zmiana dystansu na bardzo mały
         //mSceneMgr->setSkyBox( true, "Examples/SpaceSkyBox", 5000, false ); //Zmiana dystansu na duży i rysowanie nieba na końcu
         //mSceneMgr->setSkyBox( true, "Examples/SpaceSkyBox", 100, false ); //Przykład zaciasnego SkyBox
         //2.2 Sky Dome - zakomentuj wszystkie linie po punkcie 2.1, odkomentuj poniższą
         //mSceneMgr->setSkyDome( true, "Examples/CloudySky", 5, 8 );
         //2.3 Sky Plane - zakomentuj wszystkie linie po punkcie 2.1, odkomentuj poniższe
         //Plane plane;
         //plane.d = 1000; //dla Mgła i niebo ustaw wartość = 100, dla Mgła jako ciemność wartość = 10
         //plane.normal = Vector3::NEGATIVE_UNIT_Y;
         //mSceneMgr->setSkyPlane( true, plane, "Examples/SpaceSkyPlane", 1500, 75 );
         //2.4 Zakrzywienie Sky Plane - zakomentuj linię wyżej, odkomentuj tę poniżej
         //mSceneMgr->setSkyPlane( true, plane, "Examples/SpaceSkyPlane", 1500, 50, true, 1.5f, 150, 150 );
         //2.5 Zmiana tekstury chmur - zakomentuj linię wyżej, odkomentuj tę poniżej
         //mSceneMgr->setSkyPlane( true, plane, "Examples/CloudySky", 1500, 40, true, 1.5f, 150, 150  );
         //4.1 Mgła i niebo (SkyDome) - zakomentuj powyższą linię i odkomentuj poniższą
         //mSceneMgr->setSkyDome( true, "Examples/CloudySky", 5, 8, 500 );
         //4.2 Mgła i niebo (SkyPlane) - zakomentuj powyższe odkomentuj poniższą
         //mSceneMgr->setSkyPlane( true, plane, "Examples/CloudySky", 500, 20, true, 0.5, 150, 150 );
         //5.1 Mgła jako ciemnośc - zakomentuj powyśze linie z mSceneMgr->setSkyPlane i odkomentuj poniższą
         //mSceneMgr->setSkyPlane( true, plane, "Examples/SpaceSkyPlane", 100, 45, true, 0.5, 150, 150 );
   }
};

#ifdef __cplusplus
extern "C" {
#endif

#if OGRE_PLATFORM == OGRE_PLATFORM_WIN32   /* W zalezności od systemu operacyjnego */
INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR strCmdLine, INT )
#else
int main(int argc, char **argv)
#endif
{
 MyApp App;     // Tworzymy instancję naszej klasy
  try
  {
    App.go();       // ExampleApplication dostarcza metodę go, która rozpoczyna rendering
    return 0;   // Zwraca 0 w przypadku powodzenia
  }
  catch (Ogre::Exception& e)  // Przechwytuje wyjątki (błędy)
  {
#if OGRE_PLATFORM == OGRE_PLATFORM_WIN32   // W zależności od systemu operacyjnego
    MessageBox( NULL, e.getFullDescription().c_str(), "Wyjątek!",
          MB_OK | MB_ICONERROR | MB_TASKMODAL);
#else
    std::cerr <<"Wyjątek:\n";
    std::cerr <<e.getFullDescription().c_str() <<"\n";
#endif
    return 1;   // Zwrócenie liczby różnej od zera oznacza niepowodzenie
  }
}

#ifdef __cplusplus
}
#endif