现在的位置: 首页 > 综合 > 正文

ogre一些代码

2013年09月16日 ⁄ 综合 ⁄ 共 4567字 ⁄ 字号 评论关闭

  //create root
  Ogre::Root* rt=new Ogre::Root("C:\\workspace\\ogre\\ogre4vs2010\\MyOgre\\Debug\\plugins.cfg",
   "C:\\workspace\\ogre\\ogre4vs2010\\MyOgre\\Debug\\ogre.cfg",
   "C:\\workspace\\ogre\\ogre4vs2010\\MyOgre\\Debug\\ogre.log");
  if(!rt->restoreConfig())
   rt->showConfigDialog();

  //create window
  Ogre::RenderWindow* rw=rt->initialise(true);
  size_t winHandler=0;
  rw->getCustomAttribute("WINDOW",&winHandler);
  rw->setAutoUpdated(true);

  //create input system
  std::ostringstream winHandlerStr;
  winHandlerStr<<winHandler;
  OIS::ParamList pl;
  pl.insert(std::make_pair("WINDOW",winHandlerStr.str()));
  OIS::InputManager* im=OIS::InputManager::createInputSystem(pl);
  /**
  OIS::Mouse* mouse=static_cast<OIS::Mouse*>(im->createInputObject(OIS::OISMouse,true));
  OIS::Keyboard* mKeyboard=static_cast<OIS::Keyboard*>(im->createInputObject(OIS::OISKeyboard,true));

  mouse->capture();
  mKeyboard->capture();
  mouse->setEventCallback(NULL);
  mKeyboard->setEventCallback(NULL);
  const OIS::MouseState ms=mouse->getMouseState();
  ms.width=rw->getWidth();
  ms.height=rw->getHeight();
  rt->addFrameListener(NULL);
  Ogre::WindowEventUtilities::addWindowEventListener(rw,NULL);
  **/
  Ogre::ResourceGroupManager::getSingleton().addResourceLocation(
   "C:\\workspace\\ogre\\ogre4vs2010\\OgreSDK_vc10_v1-8-1\\media\\models"
   ,"FileSystem"
   ,"models");
  Ogre::ResourceGroupManager::getSingleton().addResourceLocation(
   "C:\\workspace\\ogre\\ogre4vs2010\\OgreSDK_vc10_v1-8-1\\media\\materials\\scripts"
   ,"FileSystem"
   ,"materials");
 

  Ogre::OverlayManager& om=Ogre::OverlayManager::getSingleton();
  Ogre::Overlay* ol=om.create("test");
  Ogre::OverlayContainer* testPanel=(Ogre::OverlayContainer*)om.createOverlayElement("Panel","testPanel");
  ol->add2D(testPanel);
  ol->setZOrder(10);
  
  ol->show();

  Ogre::Overlay* overlay=om.create("overlay");
  overlay->setZOrder(100);
  Ogre::OverlayContainer* ole=(Ogre::OverlayContainer*)om.createOverlayElement("Panel","Backdrop");
  overlay->add2D(ole);
  overlay->show();

  rw->removeAllViewports();
  
 
  //create scenemanager and camera
  Ogre::SceneManager* sm=rt->createSceneManager(Ogre::ST_GENERIC,"testScence");
  Ogre::Camera* oc=sm->createCamera("testCamera");
  oc->setNearClipDistance(5);
  oc->setPosition(-300,0,0);
  oc->lookAt(100,0,0);
  rw->addViewport(oc);

  //save camera status
  Ogre::NameValuePairList state;
  state["CameraPosition"] = Ogre::StringConverter::toString(oc->getPosition());
  state["CameraOrientation"] = Ogre::StringConverter::toString(oc->getOrientation());
  oc->setPosition(Ogre::StringConverter::parseVector3(state["CameraPosition"]));
  oc->setOrientation(Ogre::StringConverter::parseQuaternion(state["CameraOrientation"]));

  /**?
  Ogre::Viewport* mainVP = oc->getViewport();
  const Ogre::String& curMaterialScheme = mainVP->getMaterialScheme();

  if (curMaterialScheme == Ogre::MaterialManager::DEFAULT_SCHEME_NAME)
  {       
   mainVP->setMaterialScheme(Ogre::RTShader::ShaderGenerator::DEFAULT_SCHEME_NAME);
     
  }
  else if (curMaterialScheme == Ogre::RTShader::ShaderGenerator::DEFAULT_SCHEME_NAME)
  {
   mainVP->setMaterialScheme(Ogre::MaterialManager::DEFAULT_SCHEME_NAME);
   
  } 
  **/
  
  //create entity and attach to scence node
  Ogre::ResourceGroupManager::getSingleton().initialiseAllResourceGroups();
  Ogre::Entity* et=sm->createEntity("robot.mesh");
  //Ogre::ResourceGroupManager::getSingleton().create
  //et->setMaterial();
  Ogre::SceneNode* node=sm->getRootSceneNode()->createChildSceneNode(Ogre::Vector3(0,0,0));
  node->attachObject(et);
  node->roll(Ogre::Radian(0.9));
  node->scale(1,1,3);

  Ogre::Entity* et2=sm->createEntity("ogrehead.mesh");
  Ogre::SceneNode* node2=sm->getRootSceneNode()->createChildSceneNode(Ogre::Vector3(0,0,100));
  node2->attachObject(et2);

  
  

  //set light
  sm->setAmbientLight(Ogre::ColourValue(0.5,0.5,0.5));

  //start rendering
  rt->startRendering();
  
  
  
  
  while(1){
  }

 

  //destroy input system
  /**
  im->destroyInputObject(mouse);
  im->destroyInputObject(mkeyBoard);
  OIS::InputManager::destroyInputSystem(im);
  im=0;
  **/

  //clear scene and destroy it
  sm->clearScene();
  rt->destroySceneManager(sm);

  //unload resource
  Ogre::ResourceGroupManager::ResourceManagerIterator resMgrs =
   Ogre::ResourceGroupManager::getSingleton().getResourceManagerIterator();

   while (resMgrs.hasMoreElements())
   {
    resMgrs.getNext()->unloadUnreferencedResources();
   }
  

  

 }
 catch (Ogre::Exception& e)
 {
#if OGRE_PLATFORM == OGRE_PLATFORM_WIN32
  MessageBoxA(NULL, e.getFullDescription().c_str(), "An exception has occurred!", MB_ICONERROR | MB_TASKMODAL);
#else
  std::cerr << "An exception has occurred: " << e.getFullDescription().c_str() << std::endl;
#endif
 }

抱歉!评论已关闭.