OGRE/kody/MyApp2.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:
virtual void createCamera(void)
{
// 1.1 tworzenie kamery
mCamera = mSceneMgr->createCamera("PlayerCam");
// 1.2 ustawianie pozycji i kierunku
mCamera->setPosition(Vector3(0,10,500));
mCamera->lookAt(Vector3(0,0,0));
// 1.3 Ustawienie najbliższej możliwej widoczności
mCamera->setNearClipDistance(5);
}
virtual void createViewports(void)
{
// 2.1 Tworzenie jednego viewport, na całe okno
Viewport* vp = mWindow->addViewport(mCamera);
// 2.2 Ustawienia koloru tła na czarny
vp->setBackgroundColour(ColourValue(0,0,0));
// 2.3 Zmieniamy proporcje widoku kamery na zgodny z naszym viewportem
mCamera->setAspectRatio(Real(vp->getActualWidth()) / Real(vp->getActualHeight()));
}
void createScene(void)
{
Entity *ent;
Light *light;
// 3.1 Tworzymy światło otoczenia i ustawiamy styl cieni
mSceneMgr->setAmbientLight( ColourValue( 0, 0, 0 ) );
mSceneMgr->setShadowTechnique( SHADOWTYPE_STENCIL_ADDITIVE );
// 3.2 Wstawiamy jednostkę która będzie rzucała cień
ent = mSceneMgr->createEntity( "Ninja", "ninja.mesh" );
ent->setCastShadows( true );
mSceneMgr->getRootSceneNode()->createChildSceneNode( )->attachObject( ent );
// 3.3 Wstawienie podłoża
Plane plane( Vector3::UNIT_Y, 0 );
MeshManager::getSingleton().createPlane("ground",
ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, plane,
1500,1500,20,20,true,1,5,5,Vector3::UNIT_Z);
ent = mSceneMgr->createEntity( "GroundEntity", "ground" );
mSceneMgr->getRootSceneNode()->createChildSceneNode()->attachObject(ent);
ent->setMaterialName( "Examples/Rockwall" );
ent->setCastShadows( false );
// 4.1 Tworzenie światła
light = mSceneMgr->createLight( "Light1" );
light->setType( Light::LT_POINT );
light->setPosition( Vector3(0, 150, 250) );
// 4.2 Kolor dyfuzji i odbicia
light->setDiffuseColour( 1.0, 0.0, 0.0 );
light->setSpecularColour( 1.0, 0.0, 0.0 );
// 4.3 Tworzenie drugiego światła
light = mSceneMgr->createLight( "Light2" );
light->setType( Light::LT_DIRECTIONAL );
light->setDiffuseColour( ColourValue( .25, .25, 0 ) );
light->setSpecularColour( ColourValue( .25, .25, 0 ) );
light->setDirection( Vector3( 0, -1, 1 ) );
// 4.4 Tworzenie trzeciego światła
light = mSceneMgr->createLight( "Light3" );
light->setType( Light::LT_SPOTLIGHT );
light->setDiffuseColour( 0, 0, 1.0 );
light->setSpecularColour( 0, 0, 1.0 );
light->setDirection( -1, -1, 0 );
light->setPosition( Vector3( 300, 300, 0 ) );
light->setSpotlightRange( Degree(35), Degree(50) );
}
};
#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