Revision: 8392 http://playerstage.svn.sourceforge.net/playerstage/?rev=8392&view=rev Author: natepak Date: 2009-11-12 02:09:12 +0000 (Thu, 12 Nov 2009)
Log Message: ----------- Fixed window split, and added visualization of the camera pose Modified Paths: -------------- code/gazebo/trunk/Media/materials/scripts/Gazebo.material code/gazebo/trunk/server/MeshManager.cc code/gazebo/trunk/server/MeshManager.hh code/gazebo/trunk/server/gui/GLWindow.cc code/gazebo/trunk/server/rendering/OgreCamera.hh code/gazebo/trunk/server/rendering/OgreVisual.cc code/gazebo/trunk/server/rendering/OgreVisual.hh code/gazebo/trunk/server/rendering/UserCamera.cc code/gazebo/trunk/server/rendering/UserCamera.hh Modified: code/gazebo/trunk/Media/materials/scripts/Gazebo.material =================================================================== --- code/gazebo/trunk/Media/materials/scripts/Gazebo.material 2009-11-11 23:48:31 UTC (rev 8391) +++ code/gazebo/trunk/Media/materials/scripts/Gazebo.material 2009-11-12 02:09:12 UTC (rev 8392) @@ -196,6 +196,23 @@ } } +material Gazebo/WhiteEmissive +{ + receive_shadows off + + technique + { + pass + { + ambient 1.000000 1.000000 1.000000 1.000000 + diffuse 1.000000 1.000000 1.000000 1.000000 + specular 0.200000 0.200000 0.200000 1.000000 + emissive 1.000000 1.000000 1.000000 1.000000 + lighting on + } + } +} + material Gazebo/RedEmissive { receive_shadows off Modified: code/gazebo/trunk/server/MeshManager.cc =================================================================== --- code/gazebo/trunk/server/MeshManager.cc 2009-11-11 23:48:31 UTC (rev 8391) +++ code/gazebo/trunk/server/MeshManager.cc 2009-11-12 02:09:12 UTC (rev 8392) @@ -31,6 +31,7 @@ Vector2<double>(1,1)); this->CreateCylinder("unit_cylinder", 0.5, 1.0, 1, 32); this->CreateCone("unit_cone", 0.5, 1.0, 5, 32); + this->CreateCamera("unit_camera", 0.5); } //////////////////////////////////////////////////////////////////////////////// @@ -314,7 +315,102 @@ subMesh->AddIndex(ind[i]); } +//////////////////////////////////////////////////////////////////////////////// +/// Create a Camera mesh +void MeshManager::CreateCamera(const std::string &name, float scale) +{ + int i,k; + if (this->HasMesh(name)) + { + return; + } + + Mesh *mesh = new Mesh(); + mesh->SetName(name); + this->meshes.insert( std::make_pair(name, mesh) ); + + SubMesh *subMesh = new SubMesh(); + mesh->AddSubMesh(subMesh); + + // Vertex values + float v[8][3] = + { + {-1, -1, -1}, {-1, -1, +1}, {+1, -1, +1}, {+1, -1, -1}, + {-1, +1, -1}, {-1, +1, +1}, {+1, +1, +1}, {+1, +1, -1} + }; + + // Normals for each vertex + float n[8][3]= + { + {-0.577350, -0.577350, -0.577350}, + {-0.577350, -0.577350, 0.577350}, + {0.577350, -0.577350, 0.577350}, + {0.577350, -0.577350, -0.577350}, + {-0.577350, 0.577350, -0.577350}, + {-0.577350, 0.577350, 0.577350}, + {0.577350, 0.577350, 0.577350}, + {0.577350, 0.577350, -0.577350} + }; + + // Texture coords + /*float t[4][2] = + { + {uvCoords.x, 0}, {0, 0}, {0,uvCoords.y}, {uvCoords.x, uvCoords.y} + };*/ + + // Vertices + int faces[6][4] = + { + {2, 1, 0, 3}, {5, 6, 7, 4}, + {2, 6, 5, 1}, {1, 5, 4, 0}, + {0, 4, 7, 3}, {6, 2, 3, 7} + }; + + // Indices + int ind[36] = + { + 0, 1, 2, + 2, 3, 0, + 4, 5, 7, + 7, 5, 6, + 11,8,9, + 9,10,11, + 12, 13, 15, + 15, 13, 14, + 16, 17, 18, + 18, 19, 16, + 21,22,23, + 23,20,21, + }; + + // Compute the vertices + for (i = 0; i < 8; i++) + { + v[i][0] *= scale * 0.5; + v[i][1] *= scale * 0.5; + v[i][2] *= scale * 0.5; + } + + // For each face + for (i = 0; i < 6; i++) + { + // For each vertex in the face + for (k=0; k<4; k++) + { + subMesh->AddVertex(v[faces[i][k]][0], v[faces[i][k]][1], + v[faces[i][k]][2]); + subMesh->AddNormal(n[faces[i][k]][0], n[faces[i][k]][1], + n[faces[i][k]][2]); + //subMesh->AddTexCoord(t[k][0], t[k][1]); + } + } + + // Set the indices + for (i=0;i<36; i++) + subMesh->AddIndex(ind[i]); +} + //////////////////////////////////////////////////////////////////////////////// /// Create a cylinder mesh void MeshManager::CreateCylinder(const std::string &name, float radius, Modified: code/gazebo/trunk/server/MeshManager.hh =================================================================== --- code/gazebo/trunk/server/MeshManager.hh 2009-11-11 23:48:31 UTC (rev 8391) +++ code/gazebo/trunk/server/MeshManager.hh 2009-11-12 02:09:12 UTC (rev 8392) @@ -55,6 +55,9 @@ public: void CreateTube(const std::string &name, float innerRadius, float outterRadius, float height, int rings, int segments); + + /// \brief Create a Camera mesh + public: void CreateCamera(const std::string &name, float scale); private: OgreLoader *ogreLoader; private: AssimpLoader *assimpLoader; Modified: code/gazebo/trunk/server/gui/GLWindow.cc =================================================================== --- code/gazebo/trunk/server/gui/GLWindow.cc 2009-11-11 23:48:31 UTC (rev 8391) +++ code/gazebo/trunk/server/gui/GLWindow.cc 2009-11-12 02:09:12 UTC (rev 8392) @@ -65,6 +65,7 @@ { this->end(); + this->userCamera = NULL; this->moveAmount = 0.1; this->moveScale = 1; this->rotateAmount = 0.1; @@ -112,6 +113,13 @@ Fl::check(); this->mouseDrag = false; + if (this->userCamera == NULL) + { + // Create the default camera. + this->userCamera = new UserCamera( this ); + this->userCamera->Load(NULL); + } + this->userCamera->Init(); this->userCamera->RotatePitch( DTOR(30) ); this->userCamera->Translate( Vector3(-5, 0, 1) ); @@ -776,6 +784,10 @@ { pose.rot.SetFromEuler( Vector3(0, 0,0) ); } + else + { + this->activeCamera = CameraManager::Instance()->GetCamera( view ); + } cam->SetWorldPose( pose ); } Modified: code/gazebo/trunk/server/rendering/OgreCamera.hh =================================================================== --- code/gazebo/trunk/server/rendering/OgreCamera.hh 2009-11-11 23:48:31 UTC (rev 8391) +++ code/gazebo/trunk/server/rendering/OgreCamera.hh 2009-11-12 02:09:12 UTC (rev 8392) @@ -220,8 +220,8 @@ protected: unsigned int textureWidth, textureHeight; private: Ogre::Camera *camera; - private: Ogre::SceneNode *sceneNode; - private: Ogre::SceneNode *pitchNode; + protected: Ogre::SceneNode *sceneNode; + protected: Ogre::SceneNode *pitchNode; private: Pose3d pose; Modified: code/gazebo/trunk/server/rendering/OgreVisual.cc =================================================================== --- code/gazebo/trunk/server/rendering/OgreVisual.cc 2009-11-11 23:48:31 UTC (rev 8391) +++ code/gazebo/trunk/server/rendering/OgreVisual.cc 2009-11-12 02:09:12 UTC (rev 8392) @@ -46,12 +46,35 @@ OgreVisual::OgreVisual(OgreVisual *node, Entity *_owner) : Common() { + Ogre::SceneNode *pnode = NULL; + this->owner = _owner; + + if (Simulator::Instance()->GetRenderEngineEnabled()) + { + if (!node) + pnode = OgreAdaptor::Instance()->sceneMgr->getRootSceneNode(); + else + pnode = node->GetSceneNode(); + } + + this->ConstructorHelper(pnode); +} + +//////////////////////////////////////////////////////////////////////////////// +/// Constructor +OgreVisual::OgreVisual (Ogre::SceneNode *node) +{ + this->owner = NULL; + this->ConstructorHelper(node); +} + +//////////////////////////////////////////////////////////////////////////////// +// Helper for the contructor +void OgreVisual::ConstructorHelper(Ogre::SceneNode *node) +{ std::ostringstream stream; - this->mutex = new boost::recursive_mutex(); - this->owner = _owner; - Param::Begin(&this->parameters); this->xyzP = new ParamT<Vector3>("xyz", Vector3(0,0,0), 0); this->xyzP->Callback( &OgreVisual::SetPosition, this ); @@ -82,11 +105,7 @@ if (Simulator::Instance()->GetRenderEngineEnabled()) { - if (!node) - this->parentNode = OgreAdaptor::Instance()->sceneMgr->getRootSceneNode(); - else - this->parentNode = node->GetSceneNode(); - + this->parentNode = node; this->sceneBlendType = Ogre::SBT_TRANSPARENT_ALPHA; // Create a unique name for the scene node @@ -98,6 +117,7 @@ } } + //////////////////////////////////////////////////////////////////////////////// /// Destructor OgreVisual::~OgreVisual() @@ -268,7 +288,6 @@ /// Detach all objects void OgreVisual::DetachObjects() { - printf("Detaching objects\n"); boost::recursive_mutex::scoped_lock lock(*this->mutex); // Stop here if the rendering engine has been disabled Modified: code/gazebo/trunk/server/rendering/OgreVisual.hh =================================================================== --- code/gazebo/trunk/server/rendering/OgreVisual.hh 2009-11-11 23:48:31 UTC (rev 8391) +++ code/gazebo/trunk/server/rendering/OgreVisual.hh 2009-11-12 02:09:12 UTC (rev 8392) @@ -53,6 +53,12 @@ /// \brief Constructor public: OgreVisual (OgreVisual *node, Entity *owner = NULL); + /// \brief Constructor + public: OgreVisual (Ogre::SceneNode *node); + + /// \brief Helper for the contructor + private: void ConstructorHelper(Ogre::SceneNode *node); + /// \brief Destructor public: virtual ~OgreVisual(); Modified: code/gazebo/trunk/server/rendering/UserCamera.cc =================================================================== --- code/gazebo/trunk/server/rendering/UserCamera.cc 2009-11-11 23:48:31 UTC (rev 8391) +++ code/gazebo/trunk/server/rendering/UserCamera.cc 2009-11-12 02:09:12 UTC (rev 8392) @@ -33,6 +33,8 @@ #include "OgreCamera.hh" #include "OgreAdaptor.hh" #include "OgreCreator.hh" +#include "OgreVisual.hh" +#include "OgreDynamicLines.hh" #include "UserCamera.hh" using namespace gazebo; @@ -80,6 +82,63 @@ this->InitCam(); + this->visual = new OgreVisual(this->pitchNode); + OgreDynamicLines *line = OgreCreator::Instance()->CreateDynamicLine( + OgreDynamicRenderable::OT_LINE_LIST); + + float d = 0.5; + float b = 0.01; + float f = 0.2; + + // Create the front face + line->AddPoint(Vector3(0, -f, -f)); + line->AddPoint(Vector3(0, -f, +f)); + + line->AddPoint(Vector3(0, -f, +f)); + line->AddPoint(Vector3(0, +f, +f)); + + line->AddPoint(Vector3(0, +f, +f)); + line->AddPoint(Vector3(0, +f, -f)); + + line->AddPoint(Vector3(0, +f, -f)); + line->AddPoint(Vector3(0, -f, -f)); + + + // Create the connecting lines + line->AddPoint(Vector3(-0.4, 0, 0)); + line->AddPoint(Vector3(+0.0, -f, -f)); + + line->AddPoint(Vector3(-0.4, 0, 0)); + line->AddPoint(Vector3(+0.0, -f, +f)); + + line->AddPoint(Vector3(-0.4, 0, 0)); + line->AddPoint(Vector3(+0.0, +f, +f)); + + line->AddPoint(Vector3(-0.4, 0, 0)); + line->AddPoint(Vector3(+0.0, +f, -f)); + + line->AddPoint(Vector3(-0.4, 0, 0)); + line->AddPoint(Vector3(+0.0, -f, -f)); + + // Draw up arrow + line->AddPoint(Vector3(0, 0, +f)); + line->AddPoint(Vector3(0, 0, +f+0.1)); + + line->AddPoint(Vector3(0.0, -0.02, +f+0.1)); + line->AddPoint(Vector3(0.0, +0.02, +f+0.1)); + + line->AddPoint(Vector3(0.0, +0.02, +f+0.1)); + line->AddPoint(Vector3(0.0, +0.00, +f+0.15)); + + line->AddPoint(Vector3(0.0, +0.00, +f+0.15)); + line->AddPoint(Vector3(0.0, -0.02, +f+0.1)); + + line->setMaterial("Gazebo/WhiteEmissive"); + line->setVisibilityFlags(GZ_LASER_CAMERA); + + this->visual->AttachObject(line); + + this->viewport = this->window->addViewport(this->GetOgreCamera()); this->viewport->setBackgroundColour(Ogre::ColourValue::Black); Modified: code/gazebo/trunk/server/rendering/UserCamera.hh =================================================================== --- code/gazebo/trunk/server/rendering/UserCamera.hh 2009-11-11 23:48:31 UTC (rev 8391) +++ code/gazebo/trunk/server/rendering/UserCamera.hh 2009-11-12 02:09:12 UTC (rev 8392) @@ -39,6 +39,7 @@ { class GLWindow; class XMLConfigNode; + class OgreVisual; class UserCamera : public OgreCamera { @@ -84,6 +85,8 @@ private: std::string name; private: static unsigned int cameraCount; private: static int count; + + private: OgreVisual *visual; }; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. ------------------------------------------------------------------------------ Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day trial. Simplify your report design, integration and deployment - and focus on what you do best, core application coding. Discover what's new with Crystal Reports now. http://p.sf.net/sfu/bobj-july _______________________________________________ Playerstage-commit mailing list Playerstage-commit@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/playerstage-commit