//------------------------------------------------------------------------------------- void SampleApp::createScene(void) { mImpulse = btVector3(0,0,0); mLoader = new DotSceneLoader(); mLoader->parseDotScene(mSceneFile, "General", mSceneMgr,0,"",Globals::phyWorld); // Get rid of the initial camera mSceneMgr->destroyCamera(mCamera); //ENTITY DECLARATIONS Ogre::SceneNode* headNode; Ogre::Entity* head; head = mSceneMgr->createEntity("Ex1.mesh"); headNode = mSceneMgr->createSceneNode(); mSceneMgr->getRootSceneNode()->addChild(headNode); headNode->attachObject(head); //headNode->scale(0.1,0.1,0.1); //headNode->setPosition(0,25,0); //Create shape. BtOgre::StaticMeshToShapeConverter converter(head); mCharacterShape = converter.createBox(); // Declare this btCollisionShape * pointer in SampleApp.h //Calculate inertia tensor. btScalar mass = 5; btVector3 inertia; mCharacterShape -> calculateLocalInertia(mass, inertia); //Create BtOgre MotionState (connects Ogre and Bullet). BtOgre::RigidBodyState *characterState = new BtOgre::RigidBodyState(headNode); //Create the Body. mCharacterBody = new btRigidBody(mass, characterState, mCharacterShape, inertia); mCharacterBody ->setActivationState(DISABLE_DEACTIVATION); //mCharacterBody->setCollisionFlags(mCharacterBody->getCollisionFlags() | btCollisionObject::CF_STATIC_OBJECT); // Get bullet debug lines to show using F3 Globals::dbgdraw = new BtOgre::DebugDrawer(mSceneMgr -> getRootSceneNode(), Globals::phyWorld); Globals::phyWorld->setDebugDrawer(Globals::dbgdraw); Globals::phyWorld->addRigidBody(mCharacterBody); //END OF ENTITY DECLARATIONS // Loop through all cameras and grab their name and set their debug representation Ogre::SceneManager::CameraIterator cameras = mSceneMgr->getCameraIterator(); while (cameras.hasMoreElements()) { Ogre::Camera* camera = cameras.getNext(); mCamNames.push_back(camera->getName()); Ogre::Entity* debugEnt = mSceneMgr->createEntity(camera->getName() + Ogre::String("_debug"), "scbCamera.mesh"); try{ Ogre::SceneNode* sNode = mSceneMgr->getSceneNode(camera->getName()); sNode->attachObject(debugEnt); sNode->scale(0.5, 0.5, 0.5); }catch (...){ Ogre::SceneNode* pNode = mSceneMgr->getRootSceneNode()->createChildSceneNode(camera->getName()); pNode->setPosition(camera->getPosition()); pNode->setOrientation(camera->getOrientation()); pNode->attachObject(debugEnt); pNode->scale(0.5, 0.5, 0.5); } } // Grab the first available camera, for now Ogre::String cameraName = mCamNames[0]; try { mActiveCamera = mSceneMgr->getCamera(cameraName); mWindow->getViewport(0)->setCamera(mActiveCamera); mCameraMan->setCamera(mActiveCamera); mSceneMgr->getEntity(mActiveCamera->getName() + Ogre::String("_debug"))->setVisible(false); //for(unsigned int ij = 0;ij < mLoader->mPGHandles.size();ij++) //{ // mLoader->mPGHandles[ij]->setCamera(mActiveCamera); //} } catch (Ogre::Exception& e) { Ogre::LogManager::getSingleton().logMessage("SampleApp::createScene : setting the active camera to (\"" + cameraName + ") failed: " + e.getFullDescription()); } }
void OgreInfo::diagnose(std::ostream& outputStream) { Ogre::SceneManagerEnumerator::SceneManagerIterator sceneManagerI = Ogre::Root::getSingleton().getSceneManagerIterator(); while (sceneManagerI.hasMoreElements()) { Ogre::SceneManager* sceneManager = sceneManagerI.getNext(); outputStream << "Scenemanager(" << sceneManager->getTypeName() << ") " << sceneManager->getName() << std::endl; outputStream << " Number of scene nodes: " << countNodes(sceneManager->getRootSceneNode()) << std::endl; outputStream << " Movable objects:" << std::endl; unsigned int movableObjectCounter = 0; Ogre::Root::MovableObjectFactoryIterator movableObjectFactoryI = Ogre::Root::getSingleton().getMovableObjectFactoryIterator(); while (movableObjectFactoryI.hasMoreElements()) { Ogre::MovableObjectFactory* factory = movableObjectFactoryI.getNext(); std::string type(factory->getType()); { Ogre::SceneManager::MovableObjectIterator I = sceneManager->getMovableObjectIterator(type); while (I.hasMoreElements()) { movableObjectCounter++; Ogre::MovableObject* movable = I.getNext(); if (movable->getMovableType() == "Light") { Ogre::Light* light = static_cast<Ogre::Light*> (movable); outputStream << " * Light " << light->getName() << "(" << (light->isInScene() ? "in scene" : "not in scene") << ")" << std::endl; outputStream << " Pos: " << light->getDerivedPosition() << std::endl; outputStream << " Direction: " << light->getDerivedDirection() << std::endl; } else { std::stringstream ssPosAndOrientation; if (movable->getParentSceneNode() && movable->isInScene()) { ssPosAndOrientation << " pos: " << movable->getParentSceneNode()->getPosition() << " orientation: " << movable->getParentSceneNode()->getOrientation(); } outputStream << " * " << type << " " << movable->getName() << "(" << (movable->isInScene() ? "in scene" : "not in scene") << ")" << ssPosAndOrientation.str() << std::endl; // outputStream << " Pos: " << light->getDerivedPosition() << std::endl; // outputStream << " Direction: " << light->getDerivedDirection() << std::endl; } } } } outputStream << " Number of movable objects: " << movableObjectCounter << std::endl; outputStream << " Cameras:" << std::endl; { Ogre::SceneManager::CameraIterator I = sceneManager->getCameraIterator(); while (I.hasMoreElements()) { Ogre::Camera* camera = I.getNext(); outputStream << " Camera " << camera->getName() << "(" << (camera->isInScene() ? "in scene" : "not in scene") << ")" << std::endl; outputStream << " Pos: " << camera->getDerivedPosition() << std::endl; outputStream << " Direction: " << camera->getDerivedDirection() << std::endl; outputStream << " Clip distances: " << camera->getNearClipDistance() << " - " << camera->getFarClipDistance() << std::endl; } } } size_t resourceMemoryUsage = 0; outputStream << "Resource Managers:" << std::endl; Ogre::ResourceGroupManager::ResourceManagerIterator I = Ogre::ResourceGroupManager::getSingleton().getResourceManagerIterator(); while (I.hasMoreElements()) { std::string name = I.peekNextKey(); Ogre::ResourceManager* manager = I.getNext(); outputStream << " Resource Manager: " << name << std::endl; if (manager->getMemoryBudget() == std::numeric_limits<size_t>::max()) { outputStream << " Memory budget: not set" << std::endl; } else { outputStream << " Memory budget: " << manager->getMemoryBudget() << " bytes" << std::endl; } outputStream << " Memory usage: " << manager->getMemoryUsage() << " bytes" << std::endl; resourceMemoryUsage += manager->getMemoryUsage(); Ogre::ResourceManager::ResourceMapIterator resourceI = manager->getResourceIterator(); if (resourceI.hasMoreElements()) { outputStream << " Resources: " << std::endl; int resourceCount = 0; int loadedResourceCount = 0; while (resourceI.hasMoreElements()) { Ogre::ResourcePtr resource = resourceI.getNext(); if (resource->isLoaded()) { std::string reloadable = resource->isReloadable() ? " reloadable" : ""; outputStream << " " << resource->getName() << " ( " << resource->getSize() << " bytes)" << reloadable; Ogre::Texture* texture = dynamic_cast<Ogre::Texture*>(resource.get()); if (texture) { outputStream << texture->getWidth() << "x" << texture->getHeight() << " "; } outputStream << std::endl; loadedResourceCount++; } resourceCount++; } outputStream << " Total number of resources: " << resourceCount << std::endl; outputStream << " Number of loaded resources: " << loadedResourceCount << std::endl; } } outputStream << "Total memory usage for all resource manager: " << resourceMemoryUsage << " bytes" << std::endl; outputStream << std::flush; }