Przejdź do zawartości

OGRE/kody/MyApp1.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:
   /** createScene jest funkcją czysto wirtualną w ExampleApplication,
    *  nadpisujemy ją, aby nic nie robiła.
    *  Na początku tworzy ona pustą scenę.
    **/
   void createScene(void)
   {
               // 1.1. Ustawiamy kolor światła otoczenia
               mSceneMgr->setAmbientLight( ColourValue( 1, 1, 1 ) );
               // 1.2. Tworzymy jednostkę
               Entity *ent1 = mSceneMgr->createEntity( "Robot", "robot.mesh" );
               // 1.3. Tworzymy węzeł sceny
               SceneNode *node1 = mSceneMgr->getRootSceneNode()->createChildSceneNode( "RobotNode" );
               // 1.4. Związujemy jednostkę z węzłem
               node1->attachObject( ent1 );

               // 2.1 Dodajemy inne obiekty
               Entity *ent2 = mSceneMgr->createEntity( "Robot2", "robot.mesh" );
               SceneNode *node2 = mSceneMgr->getRootSceneNode()->createChildSceneNode( "RobotNode2", Vector3( 50, 0, 0 ) );
               // 3.1 Zmiana drugiego węzła na 'dziecko' pierwszego. UWAGA! zakomentuj linię powyżej i odkomentuj tę poniżej
               //SceneNode *node2 = node1->createChildSceneNode( "RobotNode2", Vector3( 50, 0, 0 ) );
               node2->attachObject( ent2 );

               // 4.1 Przesunięcie węzła drugiego
               node2->translate( Vector3( 10, 0, 10 ) );

               // 4.2 Przesunięcie węzła pierwszego
               node1->translate( Vector3( 25, 0, 0 ) );

   }
};

#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