void OculusDisplay::onInitialize() { fullscreen_property_ = new rviz::BoolProperty( "Render to Oculus", false, "If checked, will render fullscreen on your secondary screen. Otherwise, shows a window.", this, SLOT(onFullScreenChanged())); prediction_dt_property_ = new rviz::FloatProperty( "Motion prediction (ms)", 30.0, "Time in ms to predict head motion. Decreases overall latency and motion sickness.", this, SLOT(onPredictionDtChanged()) ); near_clip_property_ = new rviz::FloatProperty( "Near Clip Distance", 0.02, "Minimum rendering distance for Oculus camera.", this ); horizontal_property_ = new rviz::BoolProperty( "Fixed Horizon", true, "If checked, will ignore the pitch component of the RViz camera.", this); follow_cam_property_ = new rviz::BoolProperty( "Follow RViz Camera", true, "If checked, will set the Oculus camera to the same position as the main view camera.", this, SLOT( onFollowCamChanged() ) ); tf_frame_property_ = new rviz::TfFrameProperty( "Target Frame", "<Fixed Frame>", "Tf frame that the Oculus camera should follow.", this, context_->getFrameManager(), true ); offset_property_ = new rviz::VectorProperty( "Offset", Ogre::Vector3(0,0,0), "Additional offset of the Oculus camera from the followed RViz camera or target frame.", this ); pub_tf_property_ = new rviz::BoolProperty( "Publish tf", true, "If checked, will publish the pose of the Oculus camera as a tf frame.", this, SLOT( onPubTfChanged() ) ); pub_tf_frame_property_ = new rviz::StringProperty( "Tf Frame", "oculus", "Name of the published tf frame.", this ); render_widget_ = new rviz::RenderWidget( rviz::RenderSystem::get() ); render_widget_->setVisible(false); render_widget_->setWindowTitle( "Oculus View" ); render_widget_->setParent( context_->getWindowManager()->getParentWindow() ); render_widget_->setWindowFlags( Qt::Window | Qt::CustomizeWindowHint | Qt::WindowTitleHint | Qt::WindowMaximizeButtonHint ); Ogre::RenderWindow *window = render_widget_->getRenderWindow(); window->setVisible(false); window->setAutoUpdated(false); window->addListener(this); scene_node_ = scene_manager_->getRootSceneNode()->createChildSceneNode(); }
bool OgreSystem::initialize(Provider<ProxyCreationListener*>*proxyManager, const String&options) { mProxyManager=proxyManager; ++sNumOgreSystems; proxyManager->addListener(this); //add ogre system options here OptionValue*pluginFile; OptionValue*configFile; OptionValue*ogreLogFile; OptionValue*purgeConfig; OptionValue*createWindow; OptionValue*ogreSceneManager; OptionValue*windowTitle; OptionValue*shadowTechnique; OptionValue*shadowFarDistance; OptionValue*renderBufferAutoMipmap; OptionValue*grabCursor; InitializeClassOptions("ogregraphics",this, pluginFile=new OptionValue("pluginfile","plugins.cfg",OptionValueType<String>(),"sets the file ogre should read options from."), configFile=new OptionValue("configfile","ogre.cfg",OptionValueType<String>(),"sets the ogre config file for config options"), ogreLogFile=new OptionValue("logfile","Ogre.log",OptionValueType<String>(),"sets the ogre log file"), purgeConfig=new OptionValue("purgeconfig","false",OptionValueType<bool>(),"Pops up the dialog asking for the screen resolution no matter what"), createWindow=new OptionValue("window","true",OptionValueType<bool>(),"Render to a onscreen window"), grabCursor=new OptionValue("grabcursor","false",OptionValueType<bool>(),"Grab cursor"), windowTitle=new OptionValue("windowtitle","Sirikata",OptionValueType<String>(),"Window title name"), mOgreRootDir=new OptionValue("ogretoplevel",".",OptionValueType<String>(),"Directory with ogre plugins"), ogreSceneManager=new OptionValue("scenemanager","OctreeSceneManager",OptionValueType<String>(),"Which scene manager to use to arrange objects"), mWindowWidth=new OptionValue("windowwidth","1024",OptionValueType<uint32>(),"Window width"), mFullScreen=new OptionValue("fullscreen","false",OptionValueType<bool>(),"Fullscreen"), mWindowHeight=new OptionValue("windowheight","768",OptionValueType<uint32>(),"Window height"), mWindowDepth=new OptionValue("colordepth","8",OgrePixelFormatParser(),"Pixel color depth"), renderBufferAutoMipmap=new OptionValue("rendertargetautomipmap","false",OptionValueType<bool>(),"If the render target needs auto mipmaps generated"), mFrameDuration=new OptionValue("fps","60",FrequencyType(),"Target framerate"), shadowTechnique=new OptionValue("shadows","none",ShadowType(),"Shadow Style=[none,texture_additive,texture_modulative,stencil_additive,stencil_modulaive]"), shadowFarDistance=new OptionValue("shadowfar","1000",OptionValueType<float32>(),"The distance away a shadowcaster may hide the light"), new OptionValue("nearplane",".125",OptionValueType<float32>(),"The min distance away you can see"), new OptionValue("farplane","5000",OptionValueType<float32>(),"The max distance away you can see"), NULL); bool userAccepted=true; (mOptions=OptionSet::getOptions("ogregraphics",this))->parse(options); static bool success=((sRoot=OGRE_NEW Ogre::Root(pluginFile->as<String>(),configFile->as<String>(),ogreLogFile->as<String>()))!=NULL &&loadBuiltinPlugins() &&((purgeConfig->as<bool>()==false&&getRoot()->restoreConfig()) || (userAccepted=getRoot()->showConfigDialog()))); if (userAccepted&&success) { if (!getRoot()->isInitialised()) { bool doAutoWindow= #if defined(_WIN32) //|| defined(__APPLE__) true #else false #endif ; sRoot->initialise(doAutoWindow,windowTitle->as<String>()); void* hWnd; #if defined(_WIN32) //||defined(__APPLE__) getRoot()->getAutoCreatedWindow()->getCustomAttribute("WINDOW",&hWnd); #ifdef _WIN32 { char tmp[64]; sprintf(tmp, "SDL_WINDOWID=%u", (unsigned long)hWnd); _putenv(tmp); } #endif mInputManager=new SDLInputManager(getRoot()->getAutoCreatedWindow()->getWidth(), getRoot()->getAutoCreatedWindow()->getHeight(), getRoot()->getAutoCreatedWindow()->isFullScreen(), mWindowDepth->as<Ogre::PixelFormat>(), grabCursor->as<bool>(), hWnd); #else mInputManager=new SDLInputManager(mWindowWidth->as<uint32>(), mWindowHeight->as<uint32>(), mFullScreen->as<bool>(), mWindowDepth->as<Ogre::PixelFormat>(), grabCursor->as<bool>(), hWnd); #endif if (!doAutoWindow) { Ogre::NameValuePairList misc; #ifdef __APPLE__ { //FIXME: hWnd appears to be a NSWindow* in the default SDL 1.3 implementation //it appears Ogre wants an NSView* attempts to convert it using a .m file were insufficient to get ogre to use it //misc["externalWindowHandle"] = Ogre::StringConverter::toString((NSView*)getContentView((NSWindow*)hWnd)); //String(tmp); //misc["externalWindowHandle"] = Ogre::StringConverter::toString((size_t)hWnd); } #else misc["currentGLContext"] = String("True"); #endif Ogre::RenderWindow *rw; sRenderTarget=mRenderTarget=static_cast<Ogre::RenderTarget*>(rw=getRoot()->createRenderWindow(windowTitle->as<String>(),mWindowWidth->as<uint32>(),mWindowHeight->as<uint32>(),mFullScreen->as<bool>(),&misc)); rw->setVisible(true); }else { sRenderTarget=mRenderTarget=getRoot()->getAutoCreatedWindow(); } } else if (createWindow->as<bool>()) { Ogre::RenderWindow *rw; mRenderTarget=rw=sRoot->createRenderWindow(windowTitle->as<String>(),mWindowWidth->as<uint32>(),mWindowHeight->as<uint32>(),mFullScreen->as<bool>()); rw->setVisible(true); if (sRenderTarget==NULL) sRenderTarget=mRenderTarget; }else { mRenderTarget=createRenderTarget(windowTitle->as<String>(), mWindowWidth->as<uint32>(), mWindowHeight->as<uint32>(), renderBufferAutoMipmap->as<bool>(), mWindowDepth->as<Ogre::PixelFormat>()); } } if (!getRoot()->isInitialised()) { return false; } try { mSceneManager=getRoot()->createSceneManager(ogreSceneManager->as<String>()); }catch (Ogre::Exception &e) { if (e.getNumber()==Ogre::Exception::ERR_ITEM_NOT_FOUND) { SILOG(ogre,warning,"Cannot find ogre scene manager: "<<ogreSceneManager->as<String>()); getRoot()->createSceneManager(0); } else throw e; } mSceneManager->setShadowTechnique(shadowTechnique->as<Ogre::ShadowTechnique>()); mSceneManager->setShadowFarDistance(shadowFarDistance->as<float32>()); sActiveOgreScenes.push_back(this); Ogre::ResourceGroupManager::getSingleton().addResourceLocation(".", "FileSystem", "General"); Ogre::ResourceGroupManager::getSingleton().initialiseAllResourceGroups(); /// Although t //just to test if the cam is setup ok ==> setupResources("/home/daniel/clipmapterrain/trunk/resources.cfg"); return true; }