int MyApp::start() { _root = new Ogre::Root(); if(!_root->restoreConfig()) { _root->showConfigDialog(); _root->saveConfig(); } _pTrackManager = new TrackManager; _pSoundFXManager = new SoundFXManager; Ogre::RenderWindow* window = _root->initialise(true,"MyApp Example"); _sceneManager = _root->createSceneManager(Ogre::ST_GENERIC); Ogre::Camera* cam = _sceneManager->createCamera("MainCamera"); cam->setPosition(Ogre::Vector3(7,10.5,8)); cam->lookAt(Ogre::Vector3(0,3.5,0)); cam->setNearClipDistance(5); cam->setFarClipDistance(10000); Ogre::Viewport* viewport = window->addViewport(cam); viewport->setBackgroundColour(Ogre::ColourValue(0.0,0.0,0.0)); double width = viewport->getActualWidth(); double height = viewport->getActualHeight(); cam->setAspectRatio(width / height); loadResources(); createScene(); createOverlay(); Ogre::SceneNode *node = _sceneManager->getSceneNode("Neptuno"); _framelistener = new MyFrameListener(this, window, cam, node, _overlayManager, _sceneManager); _root->addFrameListener(_framelistener); // Reproducción del track principal... this->_mainTrack->play(); _root->startRendering(); return 0; }
void BaseScene::_SetActive() { Ogre::RenderWindow* win = GameApplication::GetSingletonPtr()->GetWindow(); win->removeAllViewports(); mViewport = win->addViewport(mCamera); mViewport->setBackgroundColour(m_BackgroundColor); mCamera->setAspectRatio((float)mViewport->getActualWidth() / (float)mViewport->getActualHeight()); mKeyboard->setEventCallback(this); mMouse->setEventCallback(this); mRoot->addFrameListener(this); if(!m_bSceneCreated) { CreateScene(); m_bSceneCreated = true; } SetActive(); }
int startup(){ _root = new Ogre::Root("plugins_d.cfg"); /* if(!_root->showConfigDialog()){ return -1; } */ Ogre::RenderSystem* _rs = _root->getRenderSystemByName("Direct3D9 Rendering Subsystem"); // or use "OpenGL Rendering Subsystem" _root->setRenderSystem(_rs); _rs->setConfigOption("Full Screen", "No"); _rs->setConfigOption("Video Mode", "800 x 600 @ 32-bit colour"); _rs->setConfigOption("FSAA", "0"); _rs->setConfigOption("Floating-point mode", "Fastest"); _rs->setConfigOption("Use Multihead", "Auto"); _rs->setConfigOption("VSync", "No"); _rs->setConfigOption("VSync Interval", "1"); Ogre::RenderWindow* window = _root->initialise(true, "Ventana Ogre"); _sceneManager = _root->createSceneManager(Ogre::ST_GENERIC); Ogre::Camera* camera = _sceneManager->createCamera("Camera"); camera->setPosition(Ogre::Vector3(0.0f,300.0f,-1000.0f)); camera->lookAt(Ogre::Vector3(0,0,0)); camera->setNearClipDistance(5); Ogre::Viewport* viewport = window->addViewport(camera); viewport->setBackgroundColour(Ogre::ColourValue(0.0,0.0,0.0)); camera->setAspectRatio(Ogre::Real(viewport->getActualWidth()/viewport->getActualHeight())); _listener = new FrameListenerProyectos(window,camera); _root->addFrameListener(_listener); loadResources(); createScene(); _root->startRendering(); return 0; }
/** * Application main function: * Initializes Ogre, creates a window, creates scenes, starts the rendering loop */ void run() { // ----------------------- Create root object & window --------------------- // // Initialize (~ glutInit) mRoot = new Ogre::Root(); mRoot->restoreConfig(); // Read config from ogre.cfg //if(!mRoot->showConfigDialog()) return; // Alternatively, you can show a dialog window here // Create window (~ glutCreateWindow) mWindow = mRoot->initialise(true, "Basic OGRE example"); // Register per-frame callbacks (~ glutIdleFunc) mRoot->addFrameListener(this); // Register keyboard and mouse callbacks (~ glutMouseFunc, glutKeyboardFunc, glutWindowFunc) // This class already implements some logic, such as "quit on Escape". // It is described in input_util.h, feel free to play with that implementation. mEventListener = new SimpleMouseAndKeyboardListener(mWindow, mRoot, this); // ----------- Create scene ----------------- // // Each scene is represented by a "SceneManager" object, which // combines a SceneGraph (set of objects with their model transforms) // with a Camera (view-projection transform) mScene = createTriangleScene(); // Very basic colored triangle // This is like (~ glViewport), in that you could specify the region of the window to draw to. // You can have several scenes rendered to different parts in the window. Ogre::Viewport* vp = mWindow->addViewport(mScene->getCamera("MainCamera")); // ~ glClearColor vp->setBackgroundColour(Ogre::ColourValue(0, 0, 0)); // Enable control of a camera with mouse & keyboard using the utility class. mEventListener->controlCamera(mScene->getCamera("MainCamera")); // ------------------------ Configuration complete ----------------- // // Enter the infinite rendering & event processing loop. // ~ glutMainLoop() mRoot->startRendering(); }
int MyApp::start() { _root = new Ogre::Root(); if(!_root->restoreConfig()) { _root->showConfigDialog(); _root->saveConfig(); } Ogre::RenderWindow* window = _root->initialise(true,"MyApp Example"); _sceneManager = _root->createSceneManager(Ogre::ST_GENERIC); _sceneManager->setAmbientLight(Ogre::ColourValue(1, 1, 1)); _sceneManager->addRenderQueueListener(new Ogre::OverlaySystem()); Ogre::Camera* cam = _sceneManager->createCamera("MainCamera"); cam->setPosition(Ogre::Vector3(5,20,20)); cam->lookAt(Ogre::Vector3(0,0,0)); cam->setNearClipDistance(5); cam->setFarClipDistance(10000); Ogre::Viewport* viewport = window->addViewport(cam); viewport->setBackgroundColour(Ogre::ColourValue(0.0,0.0,0.0)); double width = viewport->getActualWidth(); double height = viewport->getActualHeight(); cam->setAspectRatio(width / height); loadResources(); createScene(); createOverlay(); _framelistener = new MyFrameListener(window, cam, _overlayManager, _sceneManager); _root->addFrameListener(_framelistener); _root->startRendering(); return 0; }
void test() { Ogre::Root* pOgre = new Ogre::Root("", ""); pOgre->loadPlugin(RENDER_SYSTEM); pOgre->setRenderSystem(pOgre->getAvailableRenderers().front()); pOgre->initialise(false); Ogre::NameValuePairList lArgs; //lArgs["externalWindowHandle"] = bk::format("%d", (bk::uint)l_window.get_handle()).astr; Ogre::RenderWindow* pWindow = pOgre->createRenderWindow("Heart|Dockyard", 1024, 768, false, &lArgs); Ogre::SceneManager* pSceneManager = pOgre->createSceneManager(Ogre::ST_GENERIC,"SceneManager"); pSceneManager->setShadowTechnique(Ogre::SHADOWTYPE_STENCIL_ADDITIVE); pSceneManager->setShadowCameraSetup(Ogre::ShadowCameraSetupPtr(new Ogre::FocusedShadowCameraSetup())); pSceneManager->setAmbientLight(Ogre::ColourValue(0.1f, 0.1f, 0.1f)); Ogre::Camera* pCamera = pSceneManager->createCamera("Camera"); pCamera->setFixedYawAxis(true, Ogre::Vector3::UNIT_Z); pCamera->setPosition(Ogre::Vector3(0.0f, 50.0f, 20.0f)); pCamera->lookAt(Ogre::Vector3(0.0f, 0.0f, 0.0f)); pCamera->setNearClipDistance(0.1f); pCamera->setFarClipDistance(100.0f); Ogre::Viewport* pViewport = pWindow->addViewport(pCamera); pViewport->setBackgroundColour(Ogre::ColourValue(0.0f, 0.0f, 0.0f)); pCamera->setAspectRatio(Ogre::Real(pViewport->getActualWidth()) / Ogre::Real(pViewport->getActualHeight())); Ogre::ResourceGroupManager::getSingleton().addResourceLocation("../data/dockyard.zip", "Zip", "Dockyard", true); Ogre::ResourceGroupManager::getSingleton().initialiseAllResourceGroups(); Ogre::MeshManager::getSingleton().createPlane("GroundPlane", "Dockyard", Ogre::Plane(0.0f, 0.0f, 1.0f, 0.0f), 100.0f, 100.0f, 100, 100, true, 1, 3.0f, 3.0f); Ogre::Entity* pGroundEntity = pSceneManager->createEntity("GroundPlane"); pGroundEntity->setMaterialName("Examples/Rockwall"); pGroundEntity->setCastShadows(false); pGroundEntity->getSubEntity(0)->getMaterial()->setShadingMode(Ogre::SO_PHONG); Ogre::SceneNode* pGroundNode = pSceneManager->getRootSceneNode()->createChildSceneNode(); pGroundNode->attachObject(pGroundEntity); Ogre::Entity* pCubeEntity = pSceneManager->createEntity("Cube", Ogre::SceneManager::PT_CUBE); pCubeEntity->setMaterialName("Examples/10PointBlock"); pCubeEntity->setCastShadows(true); Ogre::SceneNode* pCubeNode = pSceneManager->getRootSceneNode()->createChildSceneNode(); pCubeNode->attachObject(pCubeEntity); pCubeNode->setPosition(0.0f, 0.0f, 5.f); pCubeNode->setScale(0.1f, 0.1f, 0.1f); Ogre::ColourValue lColour1(1.0f, 1.0f, 1.0f); Ogre::ColourValue lColour2(1.0f, 1.0f, 1.0f); Ogre::ColourValue lColour3(1.0f, 1.0f, 1.0f); Ogre::Light* pLight1 = pSceneManager->createLight(); pLight1->setType(Ogre::Light::LT_SPOTLIGHT); pLight1->setPosition(30.0f, 30.0f, 30.0f); pLight1->setDirection(-1.0f, -1.0f, -1.0f); pLight1->setSpotlightRange(Ogre::Degree(30), Ogre::Degree(50)); pLight1->setDiffuseColour(lColour1 * 0.5f); Ogre::Light* pLight2 = pSceneManager->createLight(); pLight2->setType(Ogre::Light::LT_SPOTLIGHT); pLight2->setPosition(-30.0f, 30.0f, 30.0f); pLight2->setDirection(1.0f, -1.0f, -1.0f); pLight2->setSpotlightRange(Ogre::Degree(30), Ogre::Degree(50)); pLight2->setDiffuseColour(lColour2 * 0.5f); Ogre::Light* pLight3 = pSceneManager->createLight(); pLight3->setType(Ogre::Light::LT_SPOTLIGHT); pLight3->setPosition(30.0f, -30.0f, 30.0f); pLight3->setDirection(-1.0f, 1.0f, -1.0f); pLight3->setSpotlightRange(Ogre::Degree(30), Ogre::Degree(50)); pLight3->setDiffuseColour(lColour3 * 0.5f); Ogre::Overlay* pMenuOverlay = Ogre::OverlayManager::getSingleton().create("Menu"); Ogre::OverlayElement* pMenu = Ogre::OverlayManager::getSingleton().createOverlayElement("Panel", "Menu"); pMenu->setMetricsMode(Ogre::GMM_PIXELS); pMenu->setWidth(200); pMenu->setHeight(200); pMenu->setTop(30); pMenu->setLeft(30); pMenu->setMaterialName("Examples/BumpyMetal"); if (pMenu->isContainer()) pMenuOverlay->add2D(static_cast<Ogre::OverlayContainer*>(pMenu)); pMenuOverlay->show(); pOgre->startRendering(); }
void MapPresenter::initializeScene(const QRectF& rect, const Ogre::ColourValue& bkcolor, const Ogre::Vector3& eye_pos, const Ogre::Vector3& target_pos) { if (!view_->renderWindow()) return; OgreContext* pOgreContext = WorkspaceRoot::instance()->ogreContext(); scene_ = pOgreContext->createScene("MainRenderScene"); //----------------------------------scene rendering test------------------- // Setup animation default Ogre::Animation::setDefaultInterpolationMode(Ogre::Animation::IM_LINEAR); Ogre::Animation::setDefaultRotationInterpolationMode(Ogre::Animation::RIM_LINEAR); // Set ambient light scene_->setAmbientLight(Ogre::ColourValue(0.5, 0.5, 1)); //create camera active_camera_ = scene_->createCamera("MainRenderScene.Camera"); //initialise camera man camera_man_= new SdkCameraMan(active_camera_); camera_man_->setStyle(OgreBites::CS_ORBIT); // Position it at 500 in Z direction active_camera_->setPosition(eye_pos); // Look back along -Z active_camera_->lookAt(target_pos); //camera->setPolygonMode(Ogre::PM_WIREFRAME); //set aspect ratio determine left and right active_camera_->setAspectRatio(rect.width() / rect.height()); //set fovy determine top and bottom float near_distance = 10; float far_distance = 10000; float fov = 2 * ::atan(rect.height() * 0.5F / near_distance); //camera->setFOVy(Ogre::Radian(fov)); //set near and far distance active_camera_->setNearClipDistance(near_distance); active_camera_->setFarClipDistance(far_distance); //add viewport Ogre::RenderWindow* pRenderWindow = view_->renderWindow(); Viewport* vp = pRenderWindow->addViewport(active_camera_); vp->setBackgroundColour(bkcolor); //------------------------------rendering test--------------------- // Create the robot scene Entity* robotEntity = scene_->createEntity("robot", "robot.mesh"); // Add entity to the scene node // Place and rotate to face the Z direction Vector3 robotLoc(1500, 1480, 0); Quaternion robotRot(Degree(-90), Vector3(0, 1, 0)); scene_->getRootSceneNode()->createChildSceneNode(robotLoc, robotRot)->attachObject(robotEntity); /*AnimationState* robotWalkState = robotEntity->getAnimationState("Walk"); robotWalkState->setEnabled(true);*/ // Create the ninja entity Entity *ent = scene_->createEntity("ninja", "ninja.mesh"); // Add entity to the scene node // Place and rotate to face the Z direction Vector3 ninjaLoc(1460, 1470, 0); Quaternion ninjaRot(Degree(180), Vector3(0, 1, 0)); SceneNode *ninjaNode = scene_->getRootSceneNode()->createChildSceneNode(ninjaLoc, ninjaRot); ninjaNode->scale(0.5, 0.5, 0.5); // He's twice as big as our robot... ninjaNode->attachObject(ent); /*AnimationState* ninjaWalkState = ent->getAnimationState("Walk"); ninjaWalkState->setEnabled(true);*/ // Give it a little ambience with lights Ogre::Light* l; l = scene_->createLight("BlueLight"); l->setPosition(1500,1500,100); l->setDiffuseColour(0.5, 0.5, 1.0); l = scene_->createLight("GreenLight"); l->setPosition(1460,1450,-100); l->setDiffuseColour(0.5, 1.0, 0.5); camera_man_->setTarget(ninjaNode); //---------------------------------------------rendering test------------------------- view_->sceneLoaded(); }
int main() { Ogre::Root* root = new Ogre::Root(); root->addResourceLocation("/home/soulmerge/projects/Diplomarbeit/Prototype/resources/Ogre/", "FileSystem"); if (!root->restoreConfig() && !root->showConfigDialog()) { throw 1; } root->initialise(false); Ogre::SceneManager* sceneMgr = root->createSceneManager(Ogre::ST_GENERIC); sceneMgr->setAmbientLight(Ogre::ColourValue::White * 10); Ogre::RenderWindow* window = root->createRenderWindow("Ogre RenderWindow", 800, 600, false, NULL); Ogre::Camera* cam1 = sceneMgr->createCamera("cam1"); Ogre::Camera* cam2 = sceneMgr->createCamera("cam2"); Ogre::Camera* cam3 = sceneMgr->createCamera("cam3"); Ogre::Camera* cam4 = sceneMgr->createCamera("cam4"); Ogre::Viewport* vp1 = window->addViewport(cam1, 1, 0 , 0 , 0.5, 0.5); Ogre::Viewport* vp2 = window->addViewport(cam2, 2, 0.5, 0 , 0.5, 0.5); Ogre::Viewport* vp3 = window->addViewport(cam3, 3, 0 , 0.5, 0.5, 0.5); Ogre::Viewport* vp4 = window->addViewport(cam4, 4, 0.5, 0.5, 0.5, 0.5); vp1->setBackgroundColour(Ogre::ColourValue(1, 1, 1)); vp2->setBackgroundColour(Ogre::ColourValue(1, 1, 1) * 0.95); vp3->setBackgroundColour(Ogre::ColourValue(1, 1, 1) * 0.95); vp4->setBackgroundColour(Ogre::ColourValue(1, 1, 1)); Ogre::ResourceGroupManager::getSingleton().initialiseAllResourceGroups(); Ogre::Entity* model = sceneMgr->createEntity("model", "alexandria.mesh"); Ogre::SceneNode* modelNode1 = sceneMgr->getRootSceneNode()->createChildSceneNode("modelnode1"); modelNode1->attachObject(model); cam1->setNearClipDistance(5); cam2->setNearClipDistance(5); cam3->setNearClipDistance(5); cam4->setNearClipDistance(5); /* cam1->setPolygonMode(Ogre::PM_WIREFRAME); cam2->setPolygonMode(Ogre::PM_WIREFRAME); cam3->setPolygonMode(Ogre::PM_WIREFRAME); cam4->setPolygonMode(Ogre::PM_WIREFRAME); */ Ogre::SceneNode* camNode1 = sceneMgr->getRootSceneNode()->createChildSceneNode("camnode1"); Ogre::SceneNode* camNode2 = sceneMgr->getRootSceneNode()->createChildSceneNode("camnode2"); Ogre::SceneNode* camNode3 = sceneMgr->getRootSceneNode()->createChildSceneNode("camnode3"); Ogre::SceneNode* camNode4 = sceneMgr->getRootSceneNode()->createChildSceneNode("camnode4"); camNode1->attachObject(cam1); camNode2->attachObject(cam2); camNode3->attachObject(cam3); camNode4->attachObject(cam4); Ogre::Quaternion q; q.FromAngleAxis(Ogre::Degree(90), Ogre::Vector3::UNIT_Y); camNode1->lookAt(Ogre::Vector3(-1, -1, -1), Ogre::Node::TS_LOCAL); camNode2->setOrientation(q * camNode1->getOrientation()); camNode3->setOrientation(q * camNode2->getOrientation()); camNode4->setOrientation(q * camNode3->getOrientation()); camNode1->setPosition(100, 100, 100); camNode2->setPosition(100, 100, -100); camNode3->setPosition(-100, 100, -100); camNode4->setPosition(-100, 100, 100); while(true) { Ogre::WindowEventUtilities::messagePump(); if (window->isClosed()) { return 0; } if (!root->renderOneFrame()) { return 0; } } return 0; }
INT WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { #else int main (int argc, char *argv[]) { #endif #define OGRE_STATIC_ParticleFX 1 Ogre::Root *ogre; Ogre::RenderWindow *window; Ogre::SceneManager *sceneMgr; Ogre::Camera *camera; // fire up an Ogre rendering window. Clearing the first two (of three) params will let us // specify plugins and resources in code instead of via text file ogre = new Ogre::Root("", ""); // This is a VERY minimal rendersystem loading example; we are hardcoding the OpenGL // renderer, instead of loading GL and D3D9. We will add renderer selection support in a // future article. // I separate the debug and release versions of my plugins using the same "_d" suffix that // the Ogre main libraries use; you may need to remove the "_d" in your code, depending on the // naming convention you use ogre->loadPlugin("RenderSystem_GL_d"); ogre->loadPlugin("Plugin_ParticleFX_d"); const Ogre::RenderSystemList &renderSystems = ogre->getAvailableRenderers(); Ogre::RenderSystemList::const_iterator r_it; // we do this step just to get an iterator that we can use with setRenderSystem. In a future article // we actually will iterate the list to display which renderers are available. // renderSystems = ogre->getAvailableRenderers(); r_it = renderSystems.begin(); ogre->setRenderSystem(*r_it); ogre->initialise(false); // load common plugins ogre->loadPlugin("Plugin_CgProgramManager_d"); ogre->loadPlugin("Plugin_OctreeSceneManager_d"); // setup main window; hardcode some defaults for the sake of presentation Ogre::NameValuePairList opts; opts["resolution"] = "1024x768"; opts["fullscreen"] = "false"; opts["vsync"] = "true"; // create a rendering window with the title "CDK" window = ogre->createRenderWindow("CDK", 1024, 768, false, &opts); // load the basic resource location(s) Ogre::ResourceGroupManager::getSingleton().addResourceLocation( "resource", "FileSystem", "General"); Ogre::ResourceGroupManager::getSingleton().addResourceLocation( "resource/gui.zip", "Zip", "GUI"); Ogre::ResourceGroupManager::getSingleton().addResourceLocation( "resource/textures", "FileSystem", "Textures"); Ogre::ResourceGroupManager::getSingleton().addResourceLocation( "resource/particles", "FileSystem", "Particles"); Ogre::ResourceGroupManager::getSingleton().addResourceLocation( "resource/materials", "FileSystem", "Materials"); #if defined(WIN32) Ogre::ResourceGroupManager::getSingleton().addResourceLocation( "c:\\windows\\fonts", "FileSystem", "GUI"); #endif //Must initialize resource groups after window if using particle effects. Ogre::ResourceGroupManager::getSingleton().initialiseResourceGroup("General"); Ogre::ResourceGroupManager::getSingleton().initialiseResourceGroup("GUI"); Ogre::ResourceGroupManager::getSingleton().initialiseResourceGroup("Textures"); Ogre::ResourceGroupManager::getSingleton().initialiseResourceGroup("Materials"); Ogre::ResourceGroupManager::getSingleton().initialiseResourceGroup("Particles"); // since this is basically a CEGUI app, we can use the ST_GENERIC scene manager for now; in a later article // we'll see how to change this sceneMgr = ogre->createSceneManager(Ogre::ST_GENERIC); camera = sceneMgr->createCamera("camera"); camera->setNearClipDistance(1); Ogre::Viewport* vp = window->addViewport(camera); vp->setBackgroundColour(Ogre::ColourValue(0,0,0)); // most examples get the viewport size to calculate this; for now, we'll just // set it to 4:3 the easy way camera->setAspectRatio((Ogre::Real)1.333333); // with a scene manager and window, we can create a the GUI renderer // new way to instantiate a CEGUIOgreRenderer (Ogre 1.7) Ogre::RenderTarget *mRenderTarget = window; CEGUI::OgreRenderer* pGUIRenderer = &CEGUI::OgreRenderer::bootstrapSystem(*mRenderTarget); // create the root CEGUI class CEGUI::System* pSystem = CEGUI::System::getSingletonPtr(); // tell us a lot about what is going on (see CEGUI.log in the working directory) CEGUI::Logger::getSingleton().setLoggingLevel(CEGUI::Informative); // use this CEGUI scheme definition (see CEGUI docs for more) CEGUI::SchemeManager::getSingleton().create((CEGUI::utf8*)"TaharezLookSkin.scheme", (CEGUI::utf8*)"GUI"); // show the CEGUI mouse cursor (defined in the look-n-feel) pSystem->setDefaultMouseCursor((CEGUI::utf8*)"TaharezLook", (CEGUI::utf8*)"MouseArrow"); // use this font for text in the UI CEGUI::FontManager::getSingleton().create("Tahoma-8.font", (CEGUI::utf8*)"GUI"); pSystem->setDefaultFont((CEGUI::utf8*)"Tahoma-8"); // load a layout from the XML layout file (you'll find this in resources/gui.zip), and // put it in the GUI resource group CEGUI::Window* pLayout = CEGUI::WindowManager::getSingleton().loadWindowLayout("katana.layout", "", "GUI"); // you need to tell CEGUI which layout to display. You can call this at any time to change the layout to // another loaded layout (i.e. moving from screen to screen or to load your HUD layout). Note that this takes // a CEGUI::Window instance -- you can use anything (any widget) that serves as a root window. pSystem->setGUISheet(pLayout); // this next bit is for the sake of the input handler unsigned long hWnd; // WINDOW is generic to all platforms now as of Eihort window->getCustomAttribute("WINDOW", &hWnd); // set up the input handlers Simulation *sim = new Simulation(); // since the input handler deals with pushing input to CEGUI, we need to give it a pointer // to the CEGUI System instance to use InputHandler *handler = new InputHandler(pSystem, sim, hWnd); // put us into our "main menu" state sim->requestStateChange(GUI); // make an instance of our GUI sheet handler class MainMenuDlg* pDlg = new MainMenuDlg(pSystem, pLayout, sim); //testing shit Ogre::SceneNode *systemNode = sceneMgr->getRootSceneNode()->createChildSceneNode(Ogre::Vector3(0,0,0)); SphereMesh *sphere = NULL; sphere->createSphere("sphereMesh", 80, 64, 64); /* // Now I can create several entities using that mesh Ogre::Entity *MoonEntity = sceneMgr->createEntity("Moon", planetMesh); // Now I attach it to a scenenode, so that it becomes present in the scene. Ogre::SceneNode *EarthOrbitNode = systemNode->createChildSceneNode("Earth Orbit", Ogre::Vector3(0,0,0)); Ogre::SceneNode *EarthNode = EarthOrbitNode->createChildSceneNode("Earth", Ogre::Vector3(200,0,0)); Ogre::SceneNode *MoonNode = EarthNode->createChildSceneNode("Moon", Ogre::Vector3(150,0,0)); MoonNode->attachObject(MoonEntity); MoonEntity->getParentNode()->scale(0.5,0.5,0.5); */ //Material Tests Ogre::MaterialManager& lMaterialManager = Ogre::MaterialManager::getSingleton(); Ogre::String lNameOfResourceGroup = "Mission 1 : Deliver Tom"; Ogre::ResourceGroupManager& lRgMgr = Ogre::ResourceGroupManager::getSingleton(); lRgMgr.createResourceGroup(lNameOfResourceGroup); { Ogre::MaterialPtr lMaterial = lMaterialManager.create("M_Lighting+OneTexture",lNameOfResourceGroup); Ogre::Technique* lFirstTechnique = lMaterial->getTechnique(0); Ogre::Pass* lFirstPass = lFirstTechnique->getPass(0); lFirstPass->setDiffuse(0.8f, 0.8f, 0.8f,1.0f); lFirstPass->setAmbient(0.3f, 0.3f, 0.3f); lFirstPass->setSpecular(1.0f, 1.0f, 1.0f, 1.0f); lFirstPass->setShininess(64.0f); lFirstPass->setSelfIllumination(0.1f, 0.1f, 0.1f); Ogre::TextureUnitState* lTextureUnit = lFirstPass->createTextureUnitState(); lTextureUnit->setTextureName("SimpleTexture.bmp", Ogre::TEX_TYPE_2D); lTextureUnit->setTextureCoordSet(0); } // 3/ Lighting color. // To have the feeling of '3D', the lighting is good feeling. // It often requires the object to have correct normals (see my manual object construction), // and some lights in the scene. { Ogre::MaterialPtr lMaterial = lMaterialManager.create("Sun",lNameOfResourceGroup); Ogre::Technique* lFirstTechnique = lMaterial->getTechnique(0); Ogre::Pass* lFirstPass = lFirstTechnique->getPass(0); // Lighting is allowed on this pass. lFirstPass->setLightingEnabled(true); // Emissive / self illumination is the color 'produced' by the object. // Color values vary between 0.0(minimum) to 1.0 (maximum). Ogre::ColourValue lSelfIllumnationColour(0.5f, 0.0f, 0.0f, 1.0f); lFirstPass->setSelfIllumination(lSelfIllumnationColour); // diffuse color is the traditionnal color of the lit object. Ogre::ColourValue lDiffuseColour(1.0f, 0.4f, 0.4f, 1.0f); lFirstPass->setDiffuse(lDiffuseColour); // ambient colour is linked to ambient lighting. // If there is no ambient lighting, then this has no influence. // It the ambient lighting is at 1, then this colour is fully added. // This is often use to change the general feeling of a whole scene. Ogre::ColourValue lAmbientColour(0.4f, 0.1f, 0.1f, 1.0f); lFirstPass->setAmbient(lAmbientColour); // specular colour, is the colour of the 'little light reflection' // that you can see on some object. For example, my bald head skin // reflect the sun. This make a 'round of specular lighting'. // Set this to black if you don't want to see it. Ogre::ColourValue lSpecularColour(1.0f, 1.0f, 1.0f, 1.0f); lFirstPass->setSpecular(lSpecularColour); // Shininess is the 'inverse of specular color splattering' coefficient. // If this is big (e.g : 64) you get a very tiny dot with a quite strong color (on round surface). // If this is 0, you get a simple color layer (the dot has become very wide). Ogre::Real lShininess = 64.0f; lFirstPass->setShininess(lShininess); } { Ogre::MaterialPtr lMaterial = lMaterialManager.create("mars",lNameOfResourceGroup); Ogre::Technique* lFirstTechnique = lMaterial->getTechnique(0); Ogre::Pass* lFirstPass = lFirstTechnique->getPass(0); // Lighting is allowed on this pass. lFirstPass->setLightingEnabled(true); // Emissive / self illumination is the color 'produced' by the object. // Color values vary between 0.0(minimum) to 1.0 (maximum). Ogre::ColourValue lSelfIllumnationColour(0.6f, 0.1f, 0.1f, 0.0f); lFirstPass->setSelfIllumination(lSelfIllumnationColour); // diffuse color is the traditionnal color of the lit object. Ogre::ColourValue lDiffuseColour(1.0f, 0.2f, 0.0f, 0.0f); lFirstPass->setDiffuse(lDiffuseColour); // ambient colour is linked to ambient lighting. // If there is no ambient lighting, then this has no influence. // It the ambient lighting is at 1, then this colour is fully added. // This is often use to change the general feeling of a whole scene. Ogre::ColourValue lAmbientColour(1.0f, 0.2f, 0.0f, 0.0f); lFirstPass->setAmbient(lAmbientColour); // specular colour, is the colour of the 'little light reflection' // that you can see on some object. For example, my bald head skin // reflect the sun. This make a 'round of specular lighting'. // Set this to black if you don't want to see it. Ogre::ColourValue lSpecularColour(1.0f, 0.3f, 0.3f, 0.3f); lFirstPass->setSpecular(lSpecularColour); // Shininess is the 'inverse of specular color splattering' coefficient. // If this is big (e.g : 64) you get a very tiny dot with a quite strong color (on round surface). // If this is 0, you get a simple color layer (the dot has become very wide). Ogre::Real lShininess = 34.0f; lFirstPass->setShininess(lShininess); } { Ogre::MaterialPtr lMaterial = lMaterialManager.create("gaia",lNameOfResourceGroup); Ogre::Technique* lFirstTechnique = lMaterial->getTechnique(0); Ogre::Pass* lFirstPass = lFirstTechnique->getPass(0); // Lighting is allowed on this pass. lFirstPass->setLightingEnabled(true); // Emissive / self illumination is the color 'produced' by the object. // Color values vary between 0.0(minimum) to 1.0 (maximum). Ogre::ColourValue lSelfIllumnationColour(0.0f, 0.0f, 0.1f, 0.3f); lFirstPass->setSelfIllumination(lSelfIllumnationColour); // diffuse color is the traditionnal color of the lit object. Ogre::ColourValue lDiffuseColour(0.1f, 0.2f, 0.8f, 1.0f); lFirstPass->setDiffuse(lDiffuseColour); // ambient colour is linked to ambient lighting. // If there is no ambient lighting, then this has no influence. // It the ambient lighting is at 1, then this colour is fully added. // This is often use to change the general feeling of a whole scene. Ogre::ColourValue lAmbientColour(0.0f, 0.1f, 0.4f, 1.0f); lFirstPass->setAmbient(lAmbientColour); // specular colour, is the colour of the 'little light reflection' // that you can see on some object. For example, my bald head skin // reflect the sun. This make a 'round of specular lighting'. // Set this to black if you don't want to see it. Ogre::ColourValue lSpecularColour(0.0f, 0.3f, 1.0f, 1.0f); lFirstPass->setSpecular(lSpecularColour); // Shininess is the 'inverse of specular color splattering' coefficient. // If this is big (e.g : 64) you get a very tiny dot with a quite strong color (on round surface). // If this is 0, you get a simple color layer (the dot has become very wide). Ogre::Real lShininess = 34.0f; lFirstPass->setShininess(lShininess); } { Ogre::MaterialPtr lMaterial = lMaterialManager.create("barren",lNameOfResourceGroup); Ogre::Technique* lFirstTechnique = lMaterial->getTechnique(0); Ogre::Pass* lFirstPass = lFirstTechnique->getPass(0); // Lighting is allowed on this pass. lFirstPass->setLightingEnabled(true); // Emissive / self illumination is the color 'produced' by the object. // Color values vary between 0.0(minimum) to 1.0 (maximum). Ogre::ColourValue lSelfIllumnationColour(0.1f, 0.1f, 0.1f, 0.1f); lFirstPass->setSelfIllumination(lSelfIllumnationColour); // diffuse color is the traditionnal color of the lit object. Ogre::ColourValue lDiffuseColour(0.3f, 0.3f, 0.3f, 0.3f); lFirstPass->setDiffuse(lDiffuseColour); // ambient colour is linked to ambient lighting. // If there is no ambient lighting, then this has no influence. // It the ambient lighting is at 1, then this colour is fully added. // This is often use to change the general feeling of a whole scene. Ogre::ColourValue lAmbientColour(0.3f, 0.3f, 0.3f, 0.3f); lFirstPass->setAmbient(lAmbientColour); // specular colour, is the colour of the 'little light reflection' // that you can see on some object. For example, my bald head skin // reflect the sun. This make a 'round of specular lighting'. // Set this to black if you don't want to see it. Ogre::ColourValue lSpecularColour(0.7f, 0.7f, 0.7f, 0.7f); lFirstPass->setSpecular(lSpecularColour); // Shininess is the 'inverse of specular color splattering' coefficient. // If this is big (e.g : 64) you get a very tiny dot with a quite strong color (on round surface). // If this is 0, you get a simple color layer (the dot has become very wide). Ogre::Real lShininess = 34.0f; lFirstPass->setShininess(lShininess); } { Ogre::MaterialPtr lMaterial = lMaterialManager.create("gasgiant",lNameOfResourceGroup); Ogre::Technique* lFirstTechnique = lMaterial->getTechnique(0); Ogre::Pass* lFirstPass = lFirstTechnique->getPass(0); // Lighting is allowed on this pass. lFirstPass->setLightingEnabled(true); // Emissive / self illumination is the color 'produced' by the object. // Color values vary between 0.0(minimum) to 1.0 (maximum). Ogre::ColourValue lSelfIllumnationColour(0.0f, 0.3f, 0.0f, 0.1f); lFirstPass->setSelfIllumination(lSelfIllumnationColour); // diffuse color is the traditionnal color of the lit object. Ogre::ColourValue lDiffuseColour(0.1f, 0.7f, 0.1f, 0.3f); lFirstPass->setDiffuse(lDiffuseColour); // ambient colour is linked to ambient lighting. // If there is no ambient lighting, then this has no influence. // It the ambient lighting is at 1, then this colour is fully added. // This is often use to change the general feeling of a whole scene. Ogre::ColourValue lAmbientColour(0.1f, 0.7f, 0.3f, 0.3f); lFirstPass->setAmbient(lAmbientColour); // specular colour, is the colour of the 'little light reflection' // that you can see on some object. For example, my bald head skin // reflect the sun. This make a 'round of specular lighting'. // Set this to black if you don't want to see it. Ogre::ColourValue lSpecularColour(0.2f, 1.0f, 0.6f, 0.6f); lFirstPass->setSpecular(lSpecularColour); // Shininess is the 'inverse of specular color splattering' coefficient. // If this is big (e.g : 64) you get a very tiny dot with a quite strong color (on round surface). // If this is 0, you get a simple color layer (the dot has become very wide). Ogre::Real lShininess = 34.0f; lFirstPass->setShininess(lShininess); } //end material tests //System Creator std::string systemDefinition[10] = {"15000,0,0,false,false,false,700000,0", "300,0,0,false,false,barren,2500,1", "300,x,y,false,co2,barren,6000,2", "300,x,y,h2o,n2/o2,gaia,6300,3", "300,x,y,false,co2,mars,3400,4", "300,x,y,false,h2/he,gasgiant,71000,5", "300,x,y,false,h2/he,gasgiant,60000,6", "300,x,y,false,h2/he,gasgiant,25001,7", "300,x,y,false,h2/he,gasgiant,25000,8", "300,x,y,false,n-ice,ice,1100,9"}; StarSystem sol = StarSystem::StarSystem(sceneMgr, systemDefinition); //Star Creator /* { int x = 0; int y = 0; int kelvin = 15000; CelestialBody newstar = CelestialBody::CelestialBody(kelvin, 100, systemNode, sceneMgr, x, y); } // Spectrum testing and multi star generation. int time = 200; int x = -500; int y = 500; for ( int count = 1; count <= time; count++){ int kelvin = count * (40000/time); Star newstar = Star::Star(kelvin, 100, systemNode, sceneMgr, x, y); x += 20; if (count % 10 == 0) { y -= 20; x = -500; } } */ // I move the SceneNode back 15 so that it is visible to the camera. float PositionOffset = 0.0; float distance = -2000.0; systemNode->translate(0, PositionOffset, distance); camera->lookAt(Ogre::Vector3(0,0,distance)); while (sim->getCurrentState() != SHUTDOWN) { sol.rotateOrbits(); handler->capture(); ogre->renderOneFrame(); // run the message pump (uncomment for Eihort) Ogre::WindowEventUtilities::messagePump(); } { window->removeAllViewports(); } { sceneMgr->destroyAllCameras(); sceneMgr->destroyAllManualObjects(); sceneMgr->destroyAllEntities(); sceneMgr->destroyAllLights(); systemNode->removeAndDestroyAllChildren(); } { Ogre::ResourceGroupManager& lRgMgr = Ogre::ResourceGroupManager::getSingleton(); lRgMgr.destroyResourceGroup(lNameOfResourceGroup); } // clean up after ourselves delete pDlg; delete handler; delete sim; delete ogre; return 0; }
World::World(Eris::View& view, Ogre::RenderWindow& renderWindow, EmberOgreSignals& signals, Input& input, ShaderManager& shaderManager) : mView(view), mRenderWindow(renderWindow), mSignals(signals), mScene(new Scene()), mViewport(renderWindow.addViewport(&mScene->getMainCamera())), mAvatar(0), mMovementController(0), mMainCamera(new Camera::MainCamera(mScene->getSceneManager(), mRenderWindow, input, mScene->getMainCamera())), mMoveManager(new Authoring::EntityMoveManager(*this)), mEmberEntityFactory(new EmberEntityFactory(view, *mScene)), mMotionManager(new MotionManager()), mAvatarCameraMotionHandler(0), mEntityWorldPickListener(0), mAuthoringManager(new Authoring::AuthoringManager(*this)), mAuthoringMoverConnector(new Authoring::AuthoringMoverConnector(*mAuthoringManager, *mMoveManager)), mTerrainManager(0), mTerrainEntityManager(0), mFoliage(0), mFoliageInitializer(0), mEnvironment(0), mConfigListenerContainer(new ConfigListenerContainer()), mCalendar(new Eris::Calendar(view.getAvatar())) { mTerrainManager = new Terrain::TerrainManager(mScene->createAdapter(), *mScene, shaderManager, MainLoopController::getSingleton().EventEndErisPoll); signals.EventTerrainManagerCreated.emit(*mTerrainManager); mAfterTerrainUpdateConnection = mTerrainManager->getHandler().EventAfterTerrainUpdate.connect(sigc::mem_fun(*this, &World::terrainManager_AfterTerrainUpdate)); mTerrainEntityManager = new TerrainEntityManager(view, mTerrainManager->getHandler(), mScene->getSceneManager()); mPageDataProvider = new TerrainPageDataProvider(mTerrainManager->getHandler()); mScene->registerPageDataProvider(mPageDataProvider); mEnvironment = new Environment::Environment(*mTerrainManager, new Environment::CaelumEnvironment(&mScene->getSceneManager(), &renderWindow, mScene->getMainCamera(), *mCalendar), new Environment::SimpleEnvironment(&mScene->getSceneManager(), &renderWindow, mScene->getMainCamera())); mEnvironment->initialize(); mEnvironment->setWorldPosition(0, 0); mScene->addRenderingTechnique("forest", new ForestRenderingTechnique(*mEnvironment->getForest())); mTerrainManager->getHandler().setLightning(mEnvironment->getSun()); //set the background colour to black mViewport->setBackgroundColour(Ogre::ColourValue(0, 0, 0)); mScene->getMainCamera().setAspectRatio(Ogre::Real(mViewport->getActualWidth()) / Ogre::Real(mViewport->getActualHeight())); signals.EventMotionManagerCreated.emit(*mMotionManager); Ogre::Root::getSingleton().addFrameListener(mMotionManager); //When calling Eris::View::registerFactory ownership is transferred view.registerFactory(mEmberEntityFactory); signals.EventCreatedEmberEntityFactory.emit(*mEmberEntityFactory); view.getAvatar()->GotCharacterEntity.connect(sigc::mem_fun(*this, &World::View_gotAvatarCharacter)); mEntityWorldPickListener = new EntityWorldPickListener(mView, *mScene); mMainCamera->pushWorldPickListener(mEntityWorldPickListener); mConfigListenerContainer->registerConfigListener("graphics", "foliage", sigc::mem_fun(*this, &World::Config_Foliage)); }
int main(int argc, char* argv[]) { std::unique_ptr<ExecutionArgs> exArgs(new ExecutionArgs()); if (!processCommandLineArgs(argc, argv, *exArgs)) { return -1; } else if (exArgs->helpPrompt) { std::cout << "Usage: sts [--help] || [--config]" << std::endl; std::cout << "Options:" << std::endl; std::cout << "\t --help - print this message;" << std::endl; std::cout << "\t --config - show config dialog." << std::endl; std::cout << std::endl; return 0; } try { Ogre::String lConfigFileName = "ogre.cfg"; Ogre::String lPluginsFileName = "plugins.cfg"; Ogre::String lLogFileName = "Ogre_STS.log"; std::unique_ptr<Ogre::Root> lRoot(new Ogre::Root(lPluginsFileName, lConfigFileName, lLogFileName)); if (exArgs->showConfigDialog) { if (!lRoot->showConfigDialog()) { return 0; } } Ogre::String lWindowTitle = "STS"; Ogre::String lCustomCapacities = ""; /* Check for the valid ogre.cfg */ bool lCreateAWindowAutomatically = lRoot->restoreConfig(); if (!lCreateAWindowAutomatically) { initSomeRenderSystem(lRoot); } Ogre::RenderWindow* lWindow = lRoot->initialise(lCreateAWindowAutomatically, lWindowTitle, lCustomCapacities); if (!lWindow) { /* ogre.cfg is not available - start with hardcoded parameters */ unsigned int lSizeX = 800; unsigned int lSizeY = 600; bool lFullscreen = false; Ogre::NameValuePairList lParams; lParams["FSAA"] = "0"; lParams["vsync"] = "true"; lWindow = lRoot->createRenderWindow(lWindowTitle, lSizeX, lSizeY, lFullscreen, &lParams); } /* Create a scene manager */ Ogre::SceneManager* lScene = lRoot->createSceneManager(Ogre::ST_GENERIC, "SceneManager"); Ogre::SceneNode* lRootSceneNode = lScene->getRootSceneNode(); /* Create camera */ Ogre::Camera* lCamera = lScene->createCamera("MyCamera"); /* Create viewport (camera <-> window) */ Ogre::Viewport* vp = lWindow->addViewport(lCamera); vp->setAutoUpdated(true); vp->setBackgroundColour(Ogre::ColourValue(1, 0, 1)); lCamera->setAspectRatio(float(vp->getActualWidth()) / vp->getActualHeight()); lCamera->setPosition(Ogre::Vector3(0, 100, -1)); lCamera->lookAt(Ogre::Vector3(0, 0, 0)); /* Set clipping*/ lCamera->setNearClipDistance(1.5f); lCamera->setFarClipDistance(3000.0f); /* Lighting */ Ogre::Light* lLight = lScene->createLight("MainLight"); lLight->setPosition(Ogre::Vector3(0, 100, 0)); /* Resource manager */ Ogre::String lRcGroupName = "Main group"; initResourceMainGroup(lRcGroupName); /* Load model */ Ogre::Entity* lShipEntity = lScene->createEntity("airship.mesh"); lShipEntity->setCastShadows(false); Ogre::SceneNode* lShipNode = lRootSceneNode->createChildSceneNode(); lShipNode->attachObject(lShipEntity); lShipNode->setScale(Ogre::Vector3(3.15f, 3.15f, 3.15f)); /* Starship start point */ Ogre::Vector3 razorSP(0, -200, -100); lShipNode->setPosition(razorSP); /* Sprite billboard */ Ogre::SceneNode* lSpriteNode = lRootSceneNode->createChildSceneNode(); Ogre::BillboardSet* lBillboardSet = lScene->createBillboardSet(); lBillboardSet->setMaterialName("enemy_01", lRcGroupName); lBillboardSet->setTextureStacksAndSlices(1, 4); Ogre::Billboard* lSpriteBillboard = lBillboardSet->createBillboard(Ogre::Vector3(0, 0, 0)); lSpriteBillboard->setDimensions(48.0f / 2.0f, 58.0f / 2.0f); lSpriteBillboard->setTexcoordIndex(1); lSpriteNode->attachObject(lBillboardSet); lSpriteNode->setPosition(Ogre::Vector3(0, -200, 100)); /* Obtain the timer pointer */ Ogre::Timer* lTimer = lRoot->getTimer(); /* Skip all the messages */ lWindow->setAutoUpdated(false); lRoot->clearEventTimes(); while (!lWindow->isClosed()) { float angle = Ogre::Math::Sin(float(lTimer->getMilliseconds()) * Ogre::Math::PI / 2000.0f) * Ogre::Math::PI / 4.0f; float diplacement = Ogre::Math::Cos(float(lTimer->getMilliseconds()) * Ogre::Math::PI / 2000.0f) * 100.0f; lShipNode->setOrientation(Ogre::Quaternion(Ogre::Radian(angle), Ogre::Vector3(0, 0, 1))); lShipNode->setPosition(razorSP + Ogre::Vector3(diplacement, 0.0f, 0.0f)); unsigned int spriteFrame = (lTimer->getMilliseconds() / 125) % 2; lSpriteBillboard->setTexcoordIndex(spriteFrame); lWindow->update(false); lWindow->swapBuffers(); lRoot->renderOneFrame(); Ogre::WindowEventUtilities::messagePump(); } Ogre::LogManager::getSingleton().logMessage("Render window closed."); } catch (Ogre::Exception &e) { std::cerr << "Ogre::Exception: " << e.what() << std::endl; } catch (std::exception &e) { std::cerr << "std::exception: " << e.what() << std::endl; } return 0; }
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { #else int main (int argc, char *argv[]) { #endif Ogre::Root *ogre; Ogre::RenderWindow *window; Ogre::SceneManager *sceneMgr; Ogre::SceneManager *guiSceneMgr; Ogre::Camera *camera; Ogre::Camera *guiCamera; // fire up an Ogre rendering window. Clearing the first two (of three) params will let us // specify plugins and resources in code instead of via text file ogre = new Ogre::Root("", ""); #if defined(_DEBUG) ogre->loadPlugin("RenderSystem_GL_d"); #else ogre->loadPlugin("RenderSystem_GL"); #endif Ogre::RenderSystemList *renderSystems = NULL; Ogre::RenderSystemList::iterator r_it; renderSystems = ogre->getAvailableRenderers(); r_it = renderSystems->begin(); ogre->setRenderSystem(*r_it); ogre->initialise(false); // load common plugins #if defined(_DEBUG) //ogre->loadPlugin("Plugin_CgProgramManager_d"); ogre->loadPlugin("Plugin_OctreeSceneManager_d"); #else //ogre->loadPlugin("Plugin_CgProgramManager"); ogre->loadPlugin("Plugin_OctreeSceneManager"); #endif // load the basic resource location(s) Ogre::ResourceGroupManager::getSingleton().addResourceLocation("resource", "FileSystem", "General"); Ogre::ResourceGroupManager::getSingleton().addResourceLocation("resource/gui.zip", "Zip", "GUI"); Ogre::ResourceGroupManager::getSingleton().addResourceLocation("meshes", "FileSystem", "Meshes"); #if defined(WIN32) Ogre::ResourceGroupManager::getSingleton().addResourceLocation("c:\\windows\\fonts", "FileSystem", "GUI"); #endif Ogre::ResourceGroupManager::getSingleton().initialiseResourceGroup("General"); Ogre::ResourceGroupManager::getSingleton().initialiseResourceGroup("GUI"); Ogre::ResourceGroupManager::getSingleton().initialiseResourceGroup("Meshes"); // setup main window; hardcode some defaults for the sake of presentation Ogre::NameValuePairList opts; opts["resolution"] = "1024x768"; opts["fullscreen"] = "false"; opts["vsync"] = "false"; // create a rendering window with the title "CDK" window = ogre->createRenderWindow("Bouwgame Client v0.1", 1024, 768, false, &opts); // since this is basically a CEGUI app, we can use the ST_GENERIC scene manager for now; in a later article // we'll see how to change this sceneMgr = ogre->createSceneManager(Ogre::ST_GENERIC); guiSceneMgr = ogre->createSceneManager(Ogre::ST_GENERIC); guiCamera = guiSceneMgr->createCamera("GUICamera"); guiCamera->setNearClipDistance(5); camera = sceneMgr->createCamera("camera"); camera->setNearClipDistance(5); Ogre::Viewport* vp = window->addViewport(guiCamera); vp->setBackgroundColour(Ogre::ColourValue(0.2f,0.2f,0.8f)); /* ambient light */ sceneMgr->setAmbientLight(Ogre::ColourValue(0.8, 0.8, 0.8)); sceneMgr->setShadowTechnique(Ogre::SHADOWTYPE_STENCIL_ADDITIVE); /* meshes */ Ogre::Entity* ent = sceneMgr->createEntity( "BouwPlaatsEntity", "world.mesh" ); Ogre::SceneNode* node = sceneMgr->getRootSceneNode()->createChildSceneNode("BouwNode", Ogre::Vector3(0, 0, 0)); node->attachObject(ent); //node->setScale(Ogre::Vector3(0.7,0.7,0.7)); ent = sceneMgr->createEntity("plaats", "bouwplaats_step_00.mesh"); Ogre::Vector3 size = ent->getBoundingBox().getSize(); Ogre::LogManager::getSingletonPtr()->getDefaultLog()->logMessage(Ogre::String("Bouwplaats size: ") + Ogre::StringConverter::toString(size)); size = ent->getBoundingBox().getMaximum(); Ogre::LogManager::getSingletonPtr()->getDefaultLog()->logMessage(Ogre::String("Bouwplaats max: ") + Ogre::StringConverter::toString(size)); size = ent->getBoundingBox().getMinimum(); Ogre::LogManager::getSingletonPtr()->getDefaultLog()->logMessage(Ogre::String("Bouwplaats min: ") + Ogre::StringConverter::toString(size)); Ogre::Entity* ent1 = sceneMgr->createEntity( "KeetEntity", "keet.mesh" ); Ogre::SceneNode* scenenode = sceneMgr->getRootSceneNode()->createChildSceneNode("KeetNode", Ogre::Vector3(0, 0, 0)); scenenode->attachObject(ent1); Ogre::Entity* ent2 = sceneMgr->createEntity( "HekjeEntity", "hekje.mesh" ); Ogre::SceneNode* scenenode2 = sceneMgr->getRootSceneNode()->createChildSceneNode("HekjeNode", Ogre::Vector3(0, -100, 0)); scenenode2->attachObject(ent2); scenenode2->setScale(Ogre::Vector3(400,0,100)); // most examples get the viewport size to calculate this; for now, we'll just // set it to 4:3 the easy way camera->setAspectRatio((Ogre::Real)1.333333); camera->setPosition(Ogre::Vector3(40,100,10)); guiCamera->setPosition(0, 0, 300); guiCamera->lookAt(node->getPosition()); // this next bit is for the sake of the input handler unsigned long hWnd; window->getCustomAttribute("WINDOW", &hWnd); // set up the input handlers Simulation *sim = new Simulation(); InputHandler *handler = new InputHandler(sim, hWnd, camera); DataManager *dataManager = new DataManager(); GameAI* gameAI = new GameAI(dataManager); //Create Network Network * net = new Network(dataManager); //net->start(); sim->requestStateChange(GUI); gui = new GuiManager(); // networkshit while(!net->isConnected()) { Sleep(1000); } net->Send(GETGROUPS, "", "", NULL); net->Send(LOGIN, "gast", "gast", 1); gui->setSimulation(sim); gui->init("", ogre, guiSceneMgr, window); gui->activate("main"); handler->setWindowExtents(1024,768); SimulationState cState; Ogre::WindowEventUtilities::addWindowEventListener(window, handler); DWORD tFrameStart = 0x0; //in miliseconds signed long tFrameX = 0x0; float tDelta2 = 0.0f; //in seconds float m_fps = 60.0f; tFrameStart = GetTickCount(); float tDelta; //testAI->calculateNextPath(40,10); while ((cState = sim->getCurrentState()) != SHUTDOWN) { tFrameX = GetTickCount() - tFrameStart; tDelta2 = (float)tFrameX / 1000.0f; if (tDelta2 > 3600) // tDelta > 1 hour tDelta2 = 1.0f / m_fps; //< System tick count has highly likely overflowed, so get approximation tFrameStart = GetTickCount(); m_fps = (int)(1.0f / tDelta2); tDelta = tDelta2; handler->capture(); handler->update(tDelta); gui->update(tDelta); //if (sim->getCurrentState() == SIMULATION || sim->getCurrentState() == SIMULATION_MOUSELOOK) // testAI->update(tDelta); // run the message pump (Eihort) Ogre::WindowEventUtilities::messagePump(); ogre->renderOneFrame(); if (sim->getCurrentState() != cState) { handler->StateSwitched(cState, sim->getCurrentState()); switch (sim->getCurrentState()) { case GUI: window->getViewport(0)->setCamera(guiCamera); break; case SIMULATION: window->getViewport(0)->setCamera(camera); break; } } } // clean up after ourselves //delete testAI; delete sim; delete ogre; delete handler; delete gameAI; delete dataManager; return 0; }
bool initialise() { mRoot = new Ogre::Root(PLUGINS_CFG, OGRE_CFG, OGRE_LOG); if (!mRoot->restoreConfig()) if (!mRoot->showConfigDialog()) return false; initResources(); mWindow = mRoot->initialise(true, "CS Clone Editor v0.0"); Ogre::WindowEventUtilities::addWindowEventListener(mWindow, this); mSceneMgr = mRoot->createSceneManager(Ogre::ST_GENERIC); mSceneMgr->setAmbientLight(Ogre::ColourValue(0.7, 0.7, 0.7)); mCamera = mSceneMgr->createCamera("camera"); mWindow->addViewport(mCamera); mCamera->setAutoAspectRatio(true); mCamera->setNearClipDistance(0.1); mCamera->setFarClipDistance(10000); mCamera->setPosition(10, 10, 10); // mCamera->lookAt(0, 0, 0); mRoot->addFrameListener(this); Ogre::ResourceGroupManager::getSingleton().initialiseAllResourceGroups(); //Initializing OIS Ogre::LogManager::getSingletonPtr()->logMessage("*-*-* OIS Initialising"); OIS::ParamList pl; size_t windowHnd = 0; mWindow->getCustomAttribute("WINDOW", &windowHnd); pl.insert(std::make_pair(std::string("WINDOW"), Ogre::StringConverter::toString(windowHnd))); #if OGRE_DEBUG_MODE == 1 #if OGRE_PLATFORM == OGRE_PLATFORM_LINUX #define NO_EXCLUSIVE_INPUT #endif #endif #ifdef NO_EXCLUSIVE_INPUT #if defined OIS_WIN32_PLATFORM pl.insert(std::make_pair(std::string("w32_mouse"), std::string("DISCL_FOREGROUND" ))); pl.insert(std::make_pair(std::string("w32_mouse"), std::string("DISCL_NONEXCLUSIVE"))); pl.insert(std::make_pair(std::string("w32_keyboard"), std::string("DISCL_FOREGROUND"))); pl.insert(std::make_pair(std::string("w32_keyboard"), std::string("DISCL_NONEXCLUSIVE"))); #elif defined OIS_LINUX_PLATFORM pl.insert(std::make_pair(std::string("x11_mouse_grab"), std::string("false"))); pl.insert(std::make_pair(std::string("x11_mouse_hide"), std::string("false"))); pl.insert(std::make_pair(std::string("x11_keyboard_grab"), std::string("false"))); pl.insert(std::make_pair(std::string("XAutoRepeatOn"), std::string("true"))); #endif #endif mInputManager = OIS::InputManager::createInputSystem(pl); mKeyboard = static_cast<OIS::Keyboard*>(mInputManager->createInputObject(OIS::OISKeyboard, true)); mKeyboard->setEventCallback(this); mMouse = static_cast<OIS::Mouse*>(mInputManager->createInputObject(OIS::OISMouse, true)); mMouse->setEventCallback(this); windowResized(mWindow); //Initialising GUI Ogre::LogManager::getSingletonPtr()->logMessage("*-*-* MyGUI Initialising"); mGUI = new MyGUI::Gui; mGUI->initialise(mWindow); mGUI->load("editor.layout"); mMenuBar = mGUI->createWidget<MyGUI::MenuBar>("MenuBar", MyGUI::IntCoord(0, 0, mGUI->getViewWidth(), 28), MyGUI::ALIGN_TOP | MyGUI::ALIGN_HSTRETCH, "Overlapped"); mMenuBar->addItem("File"); mPopupMenuFile = mMenuBar->getItemMenu(0); mPopupMenuFile->addItem("New"); mPopupMenuFile->addItem("Open ..."); mPopupMenuFile->addItem("Save"); mPopupMenuFile->addItem("Save as ...", false, true); mPopupMenuFile->addItem("Settings", false, true); mPopupMenuFile->addItem("Quit"); mMenuBar->addItem("Help"); mPopupMenuHelp = mMenuBar->getItemMenu(1); mPopupMenuHelp->addItem("Help"); mPopupMenuHelp->addItem("About ..."); return (true); }
int initOgreAR(aruco::CameraParameters camParams, unsigned char* buffer, std::string resourcePath) { /// INIT OGRE FUNCTIONS #ifdef _WIN32 root = new Ogre::Root(resourcePath + "plugins_win.cfg", resourcePath + "ogre_win.cfg"); #elif __x86_64__ || __ppc64__ root = new Ogre::Root(resourcePath + "plugins_x64.cfg", resourcePath + "ogre.cfg"); #else root = new Ogre::Root(resourcePath + "plugins.cfg", resourcePath + "ogre.cfg"); #endif if (!root->showConfigDialog()) return -1; Ogre::SceneManager* smgr = root->createSceneManager(Ogre::ST_GENERIC); /// CREATE WINDOW, CAMERA AND VIEWPORT Ogre::RenderWindow* window = root->initialise(true); Ogre::Camera *camera; Ogre::SceneNode* cameraNode; camera = smgr->createCamera("camera"); camera->setNearClipDistance(0.01f); camera->setFarClipDistance(10.0f); camera->setProjectionType(Ogre::PT_ORTHOGRAPHIC); camera->setPosition(0, 0, 0); camera->lookAt(0, 0, 1); double pMatrix[16]; camParams.OgreGetProjectionMatrix(camParams.CamSize,camParams.CamSize, pMatrix, 0.05,10, false); Ogre::Matrix4 PM(pMatrix[0], pMatrix[1], pMatrix[2] , pMatrix[3], pMatrix[4], pMatrix[5], pMatrix[6] , pMatrix[7], pMatrix[8], pMatrix[9], pMatrix[10], pMatrix[11], pMatrix[12], pMatrix[13], pMatrix[14], pMatrix[15]); camera->setCustomProjectionMatrix(true, PM); camera->setCustomViewMatrix(true, Ogre::Matrix4::IDENTITY); window->addViewport(camera); cameraNode = smgr->getRootSceneNode()->createChildSceneNode("cameraNode"); cameraNode->attachObject(camera); /// CREATE BACKGROUND FROM CAMERA IMAGE int width = camParams.CamSize.width; int height = camParams.CamSize.height; // create background camera image mPixelBox = Ogre::PixelBox(width, height, 1, Ogre::PF_R8G8B8, buffer); // Create Texture mTexture = Ogre::TextureManager::getSingleton().createManual("CameraTexture",Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, Ogre::TEX_TYPE_2D,width,height,0,Ogre::PF_R8G8B8,Ogre::TU_DYNAMIC_WRITE_ONLY_DISCARDABLE); //Create Camera Material Ogre::MaterialPtr material = Ogre::MaterialManager::getSingleton().create("CameraMaterial", Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME); Ogre::Technique *technique = material->createTechnique(); technique->createPass(); material->getTechnique(0)->getPass(0)->setLightingEnabled(false); material->getTechnique(0)->getPass(0)->setDepthWriteEnabled(false); material->getTechnique(0)->getPass(0)->createTextureUnitState("CameraTexture"); Ogre::Rectangle2D* rect = new Ogre::Rectangle2D(true); rect->setCorners(-1.0, 1.0, 1.0, -1.0); rect->setMaterial("CameraMaterial"); // Render the background before everything else rect->setRenderQueueGroup(Ogre::RENDER_QUEUE_BACKGROUND); // Hacky, but we need to set the bounding box to something big, use infinite AAB to always stay visible Ogre::AxisAlignedBox aabInf; aabInf.setInfinite(); rect->setBoundingBox(aabInf); // Attach background to the scene Ogre::SceneNode* node = smgr->getRootSceneNode()->createChildSceneNode("Background"); node->attachObject(rect); /// CREATE SIMPLE OGRE SCENE // add sinbad.mesh Ogre::ResourceGroupManager::getSingleton().addResourceLocation(resourcePath + "Sinbad.zip", "Zip", "Popular"); Ogre::ResourceGroupManager::getSingleton().initialiseAllResourceGroups(); for(int i=0; i<MAX_MARKERS; i++) { Ogre::String entityName = "Marker_" + Ogre::StringConverter::toString(i); Ogre::Entity* ogreEntity = smgr->createEntity(entityName, "Sinbad.mesh"); Ogre::Real offset = ogreEntity->getBoundingBox().getHalfSize().y; ogreNode[i] = smgr->getRootSceneNode()->createChildSceneNode(); // add entity to a child node to correct position (this way, entity axis is on feet of sinbad) Ogre::SceneNode *ogreNodeChild = ogreNode[i]->createChildSceneNode(); ogreNodeChild->attachObject(ogreEntity); // Sinbad is placed along Y axis, we need to rotate to put it along Z axis so it stands up over the marker // first rotate along X axis, then add offset in Z dir so it is over the marker and not in the middle of it ogreNodeChild->rotate(Ogre::Vector3(1,0,0), Ogre::Radian(Ogre::Degree(90))); ogreNodeChild->translate(0,0,offset,Ogre::Node::TS_PARENT); // mesh is too big, rescale! const float scale = 0.006675f; ogreNode[i]->setScale(scale, scale, scale); // Init animation ogreEntity->getSkeleton()->setBlendMode(Ogre::ANIMBLEND_CUMULATIVE); if(i==0) { baseAnim[i] = ogreEntity->getAnimationState("HandsClosed"); topAnim[i] = ogreEntity->getAnimationState("HandsRelaxed"); } else if(i==1) { baseAnim[i] = ogreEntity->getAnimationState("Dance"); topAnim[i] = ogreEntity->getAnimationState("Dance"); } else if(i==2) { baseAnim[i] = ogreEntity->getAnimationState("RunBase"); topAnim[i] = ogreEntity->getAnimationState("RunTop"); } else { baseAnim[i] = ogreEntity->getAnimationState("IdleBase"); topAnim[i] = ogreEntity->getAnimationState("IdleTop"); } baseAnim[i]->setLoop(true); topAnim[i]->setLoop(true); baseAnim[i]->setEnabled(true); topAnim[i]->setEnabled(true); } /// KEYBOARD INPUT READING size_t windowHnd = 0; window->getCustomAttribute("WINDOW", &windowHnd); im = OIS::InputManager::createInputSystem(windowHnd); keyboard = static_cast<OIS::Keyboard*>(im->createInputObject(OIS::OISKeyboard, true)); return 1; }
int main( int argc, char *argv[] ) { Ogre::Root* root; Ogre::RenderWindow* window; root = new Ogre::Root( "", "" ); #ifndef _DEBUG root->loadPlugin( "RenderSystem_GL.dll" ); #else root->loadPlugin( "RenderSystem_GL_d.dll" ); #endif root->setRenderSystem( root->getAvailableRenderers()[ 0 ] ); root->initialise( false ); Ogre::NameValuePairList misc; misc[ "title" ] = "Xenogears SoundDumper"; window = root->createRenderWindow( "QGearsWindow", 800, 600, false, &misc ); LOGGER = new Logger( "game.log" ); state = GAME; DisplayFrameListener* frame_listener = new DisplayFrameListener( window ); root->addFrameListener( frame_listener ); Ogre::SceneManager* scene_manager = root->createSceneManager( Ogre::ST_GENERIC, "Scene" ); scene_manager->setAmbientLight( Ogre::ColourValue( 1.0, 1.0, 1.0 ) ); Ogre::Camera* camera = scene_manager->createCamera( "Camera" ); camera->setNearClipDistance( 5 ); Ogre::Viewport* viewport = window->addViewport( camera ); viewport->setBackgroundColour( Ogre::ColourValue( 0, 0, 0 ) ); camera->setAspectRatio( Ogre::Real( viewport->getActualWidth()) / Ogre::Real( viewport->getActualHeight() ) ); SOUNDMAN = new SoundManager(); SOUND_PARSER = new SoundParser(); Ogre::Root::getSingleton().startRendering(); delete SOUND_PARSER; delete SOUNDMAN; delete root; delete frame_listener; delete LOGGER; return 0; }
void GraphicsImpl::createViewports() { viewPort = window->addViewport(camera); viewPort->setBackgroundColour(Ogre::ColourValue(0,0,0)); camera->setAspectRatio(Ogre::Real(viewPort->getActualWidth()) / Ogre::Real(viewPort->getActualHeight())); }
int _tmain(int argc, _TCHAR* argv[]) { // ------------------------- Check for command line argument ------------------------------------------- if (! argv[1]) { printf("\n"); printf("Missing argument.\nExample: \"Converter.exe job1.cfg\""); return 0; } // ------------------------- Basic Ogre Engine initialization ------------------------------------------- Ogre::Root* root = new Ogre::Root; Ogre::RenderSystem* rendersys = root->getRenderSystemByName("Direct3D9 Rendering Subsystem"); rendersys->setConfigOption("Full Screen", "No"); rendersys->setConfigOption("Video Mode", "800 x 600 @ 32-bit colour"); root->setRenderSystem(rendersys); Ogre::ResourceGroupManager::getSingleton().addResourceLocation("resource", "FileSystem", "General"); Ogre::ResourceGroupManager::getSingleton().initialiseAllResourceGroups(); root->initialise(false); Ogre::RenderWindow* window = root->createRenderWindow("RAW2OGT", 800, 600, false); Ogre::SceneManager* scenemgr = root->createSceneManager(Ogre::SceneType::ST_GENERIC); Ogre::Camera* camera = scenemgr->createCamera("camera"); Ogre::Viewport* viewport = window->addViewport(camera); /*Ogre::Vector3 lightdir(0, -0.3, 0.75); lightdir.normalise(); Ogre::Light* l = scenemgr->createLight("tstLight"); l->setType(Ogre::Light::LT_DIRECTIONAL); l->setDirection(lightdir); l->setDiffuseColour(Ogre::ColourValue(1.0, 1.0, 1.0)); l->setSpecularColour(Ogre::ColourValue(0.4, 0.4, 0.4));*/ scenemgr->setAmbientLight(Ogre::ColourValue(0.7, 0.7, 0.7)); // --------------------------------- Start convert ---------------------------------------------------- // Load job config Ogre::ConfigFile* terrainconfig = OGRE_NEW Ogre::ConfigFile(); terrainconfig->loadDirect(argv[1]); // Load info from [general] block Ogre::String heightmapfile = terrainconfig->getSetting("heightmap", "general"); Ogre::Real heightmapscale = Ogre::StringConverter::parseReal(terrainconfig->getSetting("heightmapscale", "general")); Ogre::Real heightmapoffset = Ogre::StringConverter::parseReal(terrainconfig->getSetting("heightmapoffset", "general")); Ogre::uint16 terrainsize = Ogre::StringConverter::parseUnsignedInt(terrainconfig->getSetting("terrainsize", "general")); Ogre::Real worldsize = Ogre::StringConverter::parseReal(terrainconfig->getSetting("worldsize", "general")); Ogre::uint16 layercount = Ogre::StringConverter::parseUnsignedInt(terrainconfig->getSetting("layercount", "general")); // initialise stream to heightmapfile Ogre::DataStreamPtr stream = Ogre::ResourceGroupManager::getSingleton().openResource(heightmapfile, "General"); size_t size = stream.get()->size(); // verify size if(size != terrainsize * terrainsize * 4) OGRE_EXCEPT( Ogre::Exception::ERR_INTERNAL_ERROR, "Size of stream does not match terrainsize!", "TerrainPage" ); // load to buffer float* buffer = OGRE_ALLOC_T(float, size, Ogre::MEMCATEGORY_GENERAL); stream->read(buffer, size); // apply scale and offset for(int i=0;i<terrainsize*terrainsize;i++) { buffer[i] = (buffer[i] + heightmapoffset) * heightmapscale; } // Terrain initialization Ogre::TerrainGlobalOptions* terrainglobals = OGRE_NEW Ogre::TerrainGlobalOptions(); terrainglobals->setMaxPixelError(1); //terrainglobals->setCompositeMapDistance(30000); //terrainglobals->setLightMapDirection(lightdir); //terrainglobals->setCompositeMapAmbient(scenemgr->getAmbientLight()); //terrainglobals->setCompositeMapDiffuse(l->getDiffuseColour()); Ogre::TerrainMaterialGeneratorA::SM2Profile* pMatProfile = static_cast<Ogre::TerrainMaterialGeneratorA::SM2Profile*>(terrainglobals->getDefaultMaterialGenerator()->getActiveProfile()); pMatProfile->setLightmapEnabled(false); pMatProfile->setCompositeMapEnabled(false); Ogre::TerrainGroup* terraingroup = OGRE_NEW Ogre::TerrainGroup(scenemgr, Ogre::Terrain::ALIGN_X_Z, terrainsize, worldsize); terraingroup->setFilenameConvention(Ogre::String("terrain"), Ogre::String("ogt")); terraingroup->setOrigin(Ogre::Vector3::ZERO); Ogre::Terrain* terrain = OGRE_NEW Ogre::Terrain(scenemgr); // terrainsettings Ogre::Terrain::ImportData& imp = terraingroup->getDefaultImportSettings(); imp.terrainSize = terrainsize; imp.worldSize = worldsize; imp.minBatchSize = 33; imp.maxBatchSize = 65; // use float RAW heightmap as input imp.inputFloat = buffer; // process texture layers imp.layerList.resize(layercount); Ogre::StringVector blendmaps(layercount); for(int i=0;i<layercount;i++) { // load layer info Ogre::String sectionStr = Ogre::StringConverter::toString(i); Ogre::Real layerworldsize = Ogre::StringConverter::parseReal(terrainconfig->getSetting("worldsize", sectionStr)); if (i==0) { // no blendmap at layer 0 (baselayer) Ogre::String specular = terrainconfig->getSetting("specular", sectionStr); Ogre::String normal = terrainconfig->getSetting("normal", sectionStr); // add layer imp.layerList[i].textureNames.push_back(specular); imp.layerList[i].textureNames.push_back(normal); imp.layerList[i].worldSize = layerworldsize; } else { Ogre::String specular = terrainconfig->getSetting("specular", sectionStr); Ogre::String normal = terrainconfig->getSetting("normal", sectionStr); Ogre::String blend = terrainconfig->getSetting("blend", sectionStr); // add layer imp.layerList[i].textureNames.push_back(specular); imp.layerList[i].textureNames.push_back(normal); imp.layerList[i].worldSize = layerworldsize; blendmaps[i] = blend; } } // load the terrain terrain->prepare(imp); terrain->load(); // load those blendmaps into the layers for(int j = 1;j < terrain->getLayerCount();j++) { Ogre::TerrainLayerBlendMap *blendmap = terrain->getLayerBlendMap(j); Ogre::Image img; img.load(blendmaps[j],"General"); int blendmapsize = terrain->getLayerBlendMapSize(); if(img.getWidth() != blendmapsize) img.resize(blendmapsize, blendmapsize); float *ptr = blendmap->getBlendPointer(); Ogre::uint8 *data = static_cast<Ogre::uint8*>(img.getPixelBox().data); for(int bp = 0;bp < blendmapsize * blendmapsize;bp++) ptr[bp] = static_cast<float>(data[bp]) / 255.0f; blendmap->dirty(); blendmap->update(); } // create filename for writing int pos = heightmapfile.find_last_of('.'); if (pos < 0) heightmapfile = heightmapfile + ".ogt"; else heightmapfile = heightmapfile.substr(0, pos) + ".ogt"; // save as Ogre .OGT terrain->save(heightmapfile); Ogre::LogManager::getSingletonPtr()->logMessage(Ogre::LogMessageLevel::LML_NORMAL, heightmapfile + " successfully written."); // debug viewing (exit with CTRL+C) camera->setPosition(-terrainsize, 7000, -terrainsize); camera->lookAt(terrainsize/2,0,terrainsize/2); root->startRendering(); return 0; }