[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