OGRE/kody/MyApp1.ccp
< OGRE
#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