[Orxonox-commit 261] r2913 - in branches/map/src/orxonox: objects objects/worldentities overlays/map

Naaduun at orxonox.net Naaduun at orxonox.net
Thu Apr 9 16:52:36 CEST 2009


Author: Naaduun
Date: 2009-04-09 16:52:36 +0200 (Thu, 09 Apr 2009)
New Revision: 2913

Modified:
   branches/map/src/orxonox/objects/RadarViewable.cc
   branches/map/src/orxonox/objects/RadarViewable.h
   branches/map/src/orxonox/objects/worldentities/CameraPosition.cc
   branches/map/src/orxonox/objects/worldentities/CameraPosition.h
   branches/map/src/orxonox/objects/worldentities/ControllableEntity.cc
   branches/map/src/orxonox/objects/worldentities/ControllableEntity.h
   branches/map/src/orxonox/overlays/map/Map.cc
   branches/map/src/orxonox/overlays/map/Map.h
Log:
Added own scenemanager to map, added 2 pointer to contain mapentity and mapscenenod to radarviewable

Modified: branches/map/src/orxonox/objects/RadarViewable.cc
===================================================================
--- branches/map/src/orxonox/objects/RadarViewable.cc	2009-04-09 01:18:11 UTC (rev 2912)
+++ branches/map/src/orxonox/objects/RadarViewable.cc	2009-04-09 14:52:36 UTC (rev 2913)
@@ -44,6 +44,8 @@
         : radarObjectCamouflage_(0.0f)
         , radarObjectShape_(Dot)
         , radarObjectDescription_("staticObject")
+        , MapNode_(NULL)
+        , MapEntity_(NULL)
     {
         RegisterRootObject(RadarViewable);
     }

Modified: branches/map/src/orxonox/objects/RadarViewable.h
===================================================================
--- branches/map/src/orxonox/objects/RadarViewable.h	2009-04-09 01:18:11 UTC (rev 2912)
+++ branches/map/src/orxonox/objects/RadarViewable.h	2009-04-09 14:52:36 UTC (rev 2913)
@@ -36,6 +36,9 @@
 #include "util/Debug.h"
 #include "core/OrxonoxClass.h"
 
+#include <OgreSceneNode.h>
+#include <OgreEntity.h>
+
 namespace orxonox
 {
     /**
@@ -79,6 +82,20 @@
         inline Shape getRadarObjectShape() const
             { return this->radarObjectShape_; }
 
+/*
+        inline void setMapNode(Ogre::SceneNode * node)
+            { this->MapNode_ = node; }
+        inline Ogre::SceneNode * getMapNode() const
+            { return this->MapNode_; }
+        inline void setMapEntity(Ogre::Entity * ent)
+            { this->MapEntity_ = ent; }
+        inline Ogre::Entity * getMapEntity() const
+            { return this->MapEntity_; }
+*/
+        //Used for Map
+        Ogre::SceneNode * MapNode_;
+        Ogre::Entity * MapEntity_;
+
     private:
         void validate(const WorldEntity* object) const
         {
@@ -93,6 +110,7 @@
         Shape radarObjectShape_;
         std::string radarObjectDescription_;
         ColourValue radarObjectColour_;
+        
     };
 }
 

Modified: branches/map/src/orxonox/objects/worldentities/CameraPosition.cc
===================================================================
--- branches/map/src/orxonox/objects/worldentities/CameraPosition.cc	2009-04-09 01:18:11 UTC (rev 2912)
+++ branches/map/src/orxonox/objects/worldentities/CameraPosition.cc	2009-04-09 14:52:36 UTC (rev 2913)
@@ -29,6 +29,8 @@
 #include "OrxonoxStableHeaders.h"
 #include "CameraPosition.h"
 
+#include <OgreCamera.h>
+
 #include "core/CoreIncludes.h"
 #include "core/XMLPort.h"
 #include "Camera.h"
@@ -43,6 +45,7 @@
 
         this->bDrag_ = false;
         this->bAllowMouseLook_ = false;
+        this->bRenderCamera_ = false;
 
         this->setObjectMode(0x0);
     }
@@ -57,6 +60,7 @@
 
         XMLPortParam(CameraPosition, "drag", setDrag, getDrag, xmlelement, mode).defaultValues(false);
         XMLPortParam(CameraPosition, "mouselook", setAllowMouseLook, getAllowMouseLook, xmlelement, mode).defaultValues(false);
+        XMLPortParam(CameraPosition, "rendercamera", setRenderCamera, getRenderCamera, xmlelement, mode).defaultValues(false);
     }
 
     void CameraPosition::attachCamera(Camera* camera)
@@ -69,4 +73,9 @@
         if (this->bDrag_)
             camera->setDrag(true);
     }
+
+    void CameraPosition::attachCamera(Ogre::Camera* camera)
+    {
+        this->attachOgreObject(camera);
+    }
 }

Modified: branches/map/src/orxonox/objects/worldentities/CameraPosition.h
===================================================================
--- branches/map/src/orxonox/objects/worldentities/CameraPosition.h	2009-04-09 01:18:11 UTC (rev 2912)
+++ branches/map/src/orxonox/objects/worldentities/CameraPosition.h	2009-04-09 14:52:36 UTC (rev 2913)
@@ -53,11 +53,18 @@
             inline bool getAllowMouseLook() const
                 { return this->bAllowMouseLook_; }
 
+            inline void setRenderCamera(bool bRenderCamera)
+                { this->bRenderCamera_ = bRenderCamera; }
+            inline bool getRenderCamera() const
+                { return this->bRenderCamera_; }
+
             void attachCamera(Camera* camera);
+            void attachCamera(Ogre::Camera* camera);
 
         private:
             bool bDrag_;
             bool bAllowMouseLook_;
+            bool bRenderCamera_;
     };
 }
 

Modified: branches/map/src/orxonox/objects/worldentities/ControllableEntity.cc
===================================================================
--- branches/map/src/orxonox/objects/worldentities/ControllableEntity.cc	2009-04-09 01:18:11 UTC (rev 2912)
+++ branches/map/src/orxonox/objects/worldentities/ControllableEntity.cc	2009-04-09 14:52:36 UTC (rev 2913)
@@ -61,6 +61,7 @@
         this->playerID_ = OBJECTID_UNKNOWN;
         this->hud_ = 0;
         this->camera_ = 0;
+        this->reverseCamera_ = 0;
         this->bDestroyWhenPlayerLeft_ = false;
         this->cameraPositionRootNode_ = this->node_->createChildSceneNode();
         this->bMouseLook_ = false;
@@ -147,7 +148,11 @@
             position->attachToNode(this->cameraPositionRootNode_);
         else
             this->attach(position);
-        this->cameraPositions_.push_back(position);
+
+        if (!position->getRenderCamera())
+            this->cameraPositions_.push_back(position);
+        else
+            this->setReverseCamera(position);
     }
 
     CameraPosition* ControllableEntity::getCameraPosition(unsigned int index) const

Modified: branches/map/src/orxonox/objects/worldentities/ControllableEntity.h
===================================================================
--- branches/map/src/orxonox/objects/worldentities/ControllableEntity.h	2009-04-09 01:18:11 UTC (rev 2912)
+++ branches/map/src/orxonox/objects/worldentities/ControllableEntity.h	2009-04-09 14:52:36 UTC (rev 2913)
@@ -109,6 +109,11 @@
             inline const std::string& getCameraPositionTemkplate() const
                 { return this->cameraPositionTemplate_; }
 
+            inline void setReverseCamera(CameraPosition* camera)
+                { this->reverseCamera_ = camera; }
+            inline CameraPosition* getReverseCamera() const
+                { return this->reverseCamera_; }
+
             using WorldEntity::setPosition;
             using WorldEntity::setOrientation;
             using MobileEntity::setVelocity;
@@ -187,6 +192,7 @@
             Ogre::SceneNode* cameraPositionRootNode_;
             std::list<CameraPosition*> cameraPositions_;
             std::string cameraPositionTemplate_;
+            CameraPosition* reverseCamera_;
 
             const GametypeInfo* gtinfo_;
             unsigned int gtinfoID_;

Modified: branches/map/src/orxonox/overlays/map/Map.cc
===================================================================
--- branches/map/src/orxonox/overlays/map/Map.cc	2009-04-09 01:18:11 UTC (rev 2912)
+++ branches/map/src/orxonox/overlays/map/Map.cc	2009-04-09 14:52:36 UTC (rev 2913)
@@ -30,6 +30,19 @@
 #include <OgreSceneManager.h>
 #include <OgreSceneNode.h>
 #include <OgreEntity.h>
+#include <OgreNode.h>
+
+#include <OgreRenderWindow.h>
+#include <OgreRenderTexture.h>
+#include <OgreTexture.h>
+#include <OgreViewport.h>
+#include <OgreMaterial.h>
+#include <OgreMaterialManager.h>
+#include <OgreRoot.h>
+#include <OgreHardwarePixelBuffer.h>
+#include "objects/worldentities/ControllableEntity.h"
+#include "objects/worldentities/CameraPosition.h"
+
 #include <OgreOverlay.h>
 #include <OgreOverlayElement.h>
 #include <OgreOverlayManager.h>
@@ -38,6 +51,7 @@
 #include "core/ConfigValueIncludes.h"
 #include "core/ConsoleCommand.h"
 #include "objects/Scene.h"
+#include "objects/RadarViewable.h"
  
  namespace orxonox
  {
@@ -51,34 +65,159 @@
         //Getting Scene Manager (Hack)
         ObjectList<Scene>::iterator it = ObjectList<Scene>::begin();
         this->sManager_ = it->getSceneManager();
+
+        this->mapSceneM_ = Ogre::Root::getSingletonPtr()->createSceneManager( Ogre::ST_GENERIC,"MapScene" );
+        rootNode_ = mapSceneM_->getRootSceneNode();
         
-        this->sNode_ = new Ogre::SceneNode(sManager_);
-        oManager_ = Ogre::OverlayManager::getSingletonPtr();
-        overlay_ = oManager_->create("Map");
+        //this->sNode_ = new Ogre::SceneNode(sManager_);
+        //oManager_ = Ogre::OverlayManager::getSingletonPtr();
+        //overlay_ = oManager_->create("Map");
         //overlay_ is member of OrxonoxOverlay
         
         //Not Showing the map as default
-        this->isVisible_=false;
-        overlay_->hide();
+        //this->isVisible_=false;
+        //overlay_->hide();
         
+
         //TestEntity
-        Ogre::Entity * ent = sManager_->createEntity("ent", "drone.mesh");
-        sNode_->attachObject( ent );
-        sNode_->setPosition(0,0,-50);
+        //Ogre::Entity * ent = mapSceneM_->createEntity("ent", "drone.mesh");
+        
+        //rootNode_->attachObject( ent );
+        /*sNode_->setPosition(0,0,-50);
         overlay_->add3D(sNode_);
+        */
+	
+        
+        
+
+        
+        // Alter the camera aspect ratio to match the viewport
+        //mCamera->setAspectRatio(Real(vp->getActualWidth()) / Real(vp->getActualHeight()));
+        mReflectCam_ = mapSceneM_->createCamera("ReflectCam");
+        mReflectCam_->setPosition(200,170, -160);
+        mReflectCam_->lookAt(0,0,0);
+        mReflectCam_->setAspectRatio(1);
+
+        std::string camMat_id = "RttMat";
+        Ogre::MaterialPtr material = this->createRenderCamera(mReflectCam_, camMat_id);
+/*
+        Ogre::TexturePtr rttTex = Ogre::TextureManager::getSingleton().createManual("RttTex", Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, Ogre::TEX_TYPE_2D, 512, 512, 0, Ogre::PF_R8G8B8, Ogre::TU_RENDERTARGET);
+
+        Ogre::RenderTexture *renderTexture = rttTex->getBuffer()->getRenderTarget();
+
+        renderTexture->addViewport(mReflectCam_);
+        renderTexture->getViewport(0)->setClearEveryFrame(true);
+        renderTexture->getViewport(0)->setBackgroundColour(ColourValue::Black);
+        renderTexture->getViewport(0)->setOverlaysEnabled(false);
+
+        Ogre::MaterialPtr material = Ogre::MaterialManager::getSingleton().create("RttMat", 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)->createTextureUnitState("RttTex");
+*/
+
+
+        // create overlay
+/*
+        Ogre::Overlay* pOverlay = Ogre::OverlayManager::getSingleton().create("Overlay1");
+        
+        // Create a panel with RenderToTexture texture
+        Ogre::OverlayContainer* m_pOverlayPanel = static_cast<Ogre::OverlayContainer*>(Ogre::OverlayManager::getSingleton().createOverlayElement("Panel","OverlayPanelName%d"));
+        m_pOverlayPanel->setMetricsMode(Ogre::GMM_PIXELS);
+        m_pOverlayPanel->setPosition(10, 10);
+        m_pOverlayPanel->setDimensions(500, 300);
+        // Give overlay a texture
+        m_pOverlayPanel->setMaterialName(camMat_id); 
+        pOverlay->add2D(m_pOverlayPanel);
+        pOverlay->show();
+*/
+        overlay_ = Ogre::OverlayManager::getSingleton().create("MapOverlay");
+        Ogre::OverlayContainer* m_pOverlayPanel = static_cast<Ogre::OverlayContainer*>(Ogre::OverlayManager::getSingleton().createOverlayElement("Panel","OverlayPanelName%d"));
+        m_pOverlayPanel->setMetricsMode(Ogre::GMM_PIXELS);
+        m_pOverlayPanel->setPosition(10, 10);
+        m_pOverlayPanel->setDimensions(500, 300);
+        // Give overlay a texture
+        m_pOverlayPanel->setMaterialName(camMat_id); 
+        overlay_->add2D(m_pOverlayPanel);
+        //Not Showing the map as default
+        this->isVisible_=false;
+        overlay_->hide();
+
     }
     
+    Ogre::MaterialPtr Map::createRenderCamera(Ogre::Camera * cam, std::string matName)
+    {
+        Ogre::TexturePtr rttTex = Ogre::TextureManager::getSingleton().createManual(matName+"_tex", Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, Ogre::TEX_TYPE_2D, 512, 512, 0, Ogre::PF_R8G8B8, Ogre::TU_RENDERTARGET);
+
+        Ogre::RenderTexture *renderTexture = rttTex->getBuffer()->getRenderTarget();
+
+        renderTexture->addViewport(cam);
+        renderTexture->getViewport(0)->setClearEveryFrame(true);
+        renderTexture->getViewport(0)->setBackgroundColour(ColourValue::Black);
+        renderTexture->getViewport(0)->setOverlaysEnabled(false);
+
+        Ogre::MaterialPtr material = Ogre::MaterialManager::getSingleton().create(matName, 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)->createTextureUnitState(matName+"_tex");
+        return material;
+    }
+
+    void Map::updatePositions()
+    {
+//Ogre::Entity * ent;// = mapSceneM_->createEntity("ent1", "drone.mesh");
+       int i=0; 
+       for(ObjectList<orxonox::RadarViewable>::iterator it = ObjectList<orxonox::RadarViewable>::begin();
+            it!=ObjectList<orxonox::RadarViewable>::end();
+            it++)
+        {
+            i++;
+            //COUT(0) << "Radar_Position: " << it->getRVWorldPosition() << std::endl;
+            //Ogre::SceneNode node = it->getMapNode();
+            //Ogre::Entity ent = it->getMapEntity();
+            if( !(it->MapNode_) )
+            {
+                it->MapNode_ = rootNode_->createChildSceneNode( it->getRVWorldPosition() );
+                //it->MapNode_->translate( it->getRVOrientedVelocity(), Ogre::TS_WORLD );
+            }
+            it->MapNode_->setPosition( it->getRVWorldPosition() );
+            it->MapNode_->translate( it->getRVOrientedVelocity(), (Ogre::Node::TransformSpace)3 );
+            if( !(it->MapEntity_) )
+            {
+                it->MapEntity_ = mapSceneM_->createEntity( "MapEnt"+i, "drone.mesh");
+                it->MapNode_->attachObject( it->MapEntity_ );
+            }
+            
+        
+            
+        }
+    }
+
     void Map::XMLPort(Element& xmlElement, XMLPort::Mode mode)
     {
         SUPER(Map, XMLPort, xmlElement, mode);
+    }	
+
+    void Map::changedOwner()
+    {
+        //COUT(0) << "shipptr" << this->getOwner()->getReverseCamera() << std::endl;
+        if(this->getOwner()->getReverseCamera())
+        {
+            //COUT(0) << "foo";
+            this->getOwner()->getReverseCamera()->attachCamera(this->mReflectCam_);
+        }
     }
 
+
     void Map::toggleVisibility()
     {
         if (!(this->isVisible_))
         {
             this->overlay_->show();
             this->isVisible_=1;
+            //updatePositions();
         }
         else
         {
@@ -97,12 +236,14 @@
         //Map * m = it->getMap();
         COUT(0) << it->isVisible_ << std::endl;
         it->toggleVisibility();
+        //it->updatePositions();
         }
     }
     
     void Map::tick(float dt)
     {
-        sNode_->lookAt(Vector3::NEGATIVE_UNIT_Z, Ogre::Node::TS_WORLD, Vector3::NEGATIVE_UNIT_Z);
+        //sNode_->lookAt(Vector3::NEGATIVE_UNIT_Z, Ogre::Node::TS_WORLD, Vector3::NEGATIVE_UNIT_Z);
+        updatePositions();
         
     }
     

Modified: branches/map/src/orxonox/overlays/map/Map.h
===================================================================
--- branches/map/src/orxonox/overlays/map/Map.h	2009-04-09 01:18:11 UTC (rev 2912)
+++ branches/map/src/orxonox/overlays/map/Map.h	2009-04-09 14:52:36 UTC (rev 2913)
@@ -27,7 +27,7 @@
 #ifndef _MAP_H__
 #define _MAP_H__
 
-
+#include <string>
 #include "OrxonoxPrereqs.h"
 #include <OgrePrerequisites.h>
 #include <OgreSceneManager.h>
@@ -45,6 +45,7 @@
 #include "objects/Tickable.h"
 
 
+
 namespace orxonox
 {
     class _OrxonoxExport Map : public OrxonoxOverlay, public Tickable
@@ -56,20 +57,28 @@
 
         virtual void XMLPort(Element& xmlElement, XMLPort::Mode mode);
         virtual void tick(float dt);
+        virtual void changedOwner();
 
+        static Ogre::MaterialPtr createRenderCamera(Ogre::Camera * cam, std::string matName);
         
-        
         static void openMap();
+
+        static const int maxRange_s=1000;
         
     private: // functions
         void toggleVisibility();
+        void updatePositions();
 
 
     private: // variables
         Ogre::SceneManager* sManager_;
-        Ogre::SceneNode* sNode_;
+        Ogre::SceneManager* mapSceneM_;
+        Ogre::SceneNode* rootNode_;
         Ogre::OverlayManager * oManager_;
+        Ogre::Camera* mReflectCam_;
+
         
+        
         bool isVisible_;
     };
 }




More information about the Orxonox-commit mailing list