OGRE/kody/MyApp3.ccp
Wygląd
< 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:
// 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