예제 #1
0
Player::~Player(void) 
{
	destroyObjects();

	delete soundMgr;
	delete mFireFlash;
}
예제 #2
0
void MapGraphDisplay::processMessage( const rtabmap_ros::MapData::ConstPtr& msg )
{
	if(!(msg->graph.mapIds.size() == msg->graph.nodeIds.size() && msg->graph.poses.size() == msg->graph.nodeIds.size()))
	{
		ROS_ERROR("rtabmap_ros::MapGraph: Error map ids, pose ids and poses must have all the same size.");
		return;
	}

	// Find all graphs
	std::map<int, std::map<int, geometry_msgs::Point> > graphs;
	for(unsigned int i=0; i<msg->graph.poses.size(); ++i)
	{
		std::map<int, std::map<int, geometry_msgs::Point> >::iterator iter = graphs.find(msg->graph.mapIds[i]);
		if(iter == graphs.end())
		{
			iter = graphs.insert(std::make_pair(msg->graph.mapIds[i], std::map<int, geometry_msgs::Point>())).first;
		}
		iter->second.insert(std::make_pair(msg->graph.nodeIds[i], msg->graph.poses[i].position));
	}

	destroyObjects();

	Ogre::Vector3 position;
	Ogre::Quaternion orientation;
	if( !context_->getFrameManager()->getTransform( msg->header, position, orientation ))
	{
		ROS_DEBUG( "Error transforming from frame '%s' to frame '%s'", msg->header.frame_id.c_str(), qPrintable( fixed_frame_ ));
	}

	Ogre::Matrix4 transform( orientation );
	transform.setTrans( position );

	Ogre::ColourValue color = color_property_->getOgreColor();
	color.a = alpha_property_->getFloat();

	for(std::map<int, std::map<int, geometry_msgs::Point> >::iterator iter=graphs.begin(); iter!=graphs.end(); ++iter)
	{
		uint32_t num_points = iter->second.size();
		if(num_points > 0)
		{
			Ogre::ManualObject* manual_object = scene_manager_->createManualObject();
			manual_object->setDynamic( true );
			scene_node_->attachObject( manual_object );
			manual_objects_.push_back(manual_object);

			manual_object->estimateVertexCount( num_points );
			manual_object->begin( "BaseWhiteNoLighting", Ogre::RenderOperation::OT_LINE_STRIP );
			for( std::map<int, geometry_msgs::Point>::iterator jter=iter->second.begin(); jter!=iter->second.end(); ++jter)
			{
				const geometry_msgs::Point& pos = jter->second;
				Ogre::Vector3 xpos = transform * Ogre::Vector3( pos.x, pos.y, pos.z );
				manual_object->position( xpos.x, xpos.y, xpos.z );
				manual_object->colour( color );
			}

			manual_object->end();
		}
	}
}
예제 #3
0
void MapView::unload()
{
	if (mIsLoaded)
	{
		mIsLoaded = false;

		destroyObjects();
		destroyTerrain();

		Ogre::Root::getSingleton().destroySceneManager(mManager);
	}
}
int main(int argc, char **argv){
    glutInit(&argc, argv);          // Initialise GL environment
    setup();                        // Call additional initialisation commands
    glutDisplayFunc(draw);          // Register scene to render contents of draw() function
    glutIdleFunc(draw);
    glutReshapeFunc(reshape);
    checkGLError();                 // Check any OpenGL errors in initialisation
    glutKeyboardFunc(keyPressed);       // ASCII key handling
    glutSpecialFunc(keyPressed);        // Coded key handling
    glutMainLoop();                 // Begin rendering sequence
    // Upon exit
    destroyObjects();
    return 0;
}
예제 #5
0
void PathDisplay::updateBufferLength()
{
  destroyObjects();

  int buffer_length = buffer_length_property_->getInt();
  QColor color = color_property_->getColor();

  manual_objects_.resize( buffer_length );
  for( size_t i = 0; i < manual_objects_.size(); i++ )
  {
    Ogre::ManualObject* manual_object = scene_manager_->createManualObject();
    manual_object->setDynamic( true );
    scene_node_->attachObject( manual_object );

    manual_objects_[ i ] = manual_object;
  }
}
예제 #6
0
void PathDisplay::updateBufferLength()
{
  // Delete old path objects
  destroyObjects();

  // Read options
  int buffer_length = buffer_length_property_->getInt();
  LineStyle style = (LineStyle) style_property_->getOptionInt();

  // Create new path objects
  switch(style)
  {
  case LINES: // simple lines with fixed width of 1px
    manual_objects_.resize( buffer_length );
    for( size_t i = 0; i < manual_objects_.size(); i++ )
    {
      Ogre::ManualObject* manual_object = scene_manager_->createManualObject();
      manual_object->setDynamic( true );
      scene_node_->attachObject( manual_object );

      manual_objects_[ i ] = manual_object;
    }
    break;

  case BILLBOARDS: // billboards with configurable width
    billboard_lines_.resize( buffer_length );
    for( size_t i = 0; i < billboard_lines_.size(); i++ )
    {
      rviz::BillboardLine* billboard_line = new rviz::BillboardLine(scene_manager_, scene_node_);
      billboard_lines_[ i ] = billboard_line;
    }
    break;
  }


}
예제 #7
0
void MapGraphDisplay::processMessage( const rtabmap_ros::MapGraph::ConstPtr& msg )
{
	if(!(msg->poses.size() == msg->posesId.size()))
	{
		ROS_ERROR("rtabmap_ros::MapGraph: Error pose ids and poses must have all the same size.");
		return;
	}

	// Get links
	std::map<int, rtabmap::Transform> poses;
	std::multimap<int, rtabmap::Link> links;
	rtabmap::Transform mapToOdom;
	rtabmap_ros::mapGraphFromROS(*msg, poses, links, mapToOdom);

	destroyObjects();

	Ogre::Vector3 position;
	Ogre::Quaternion orientation;
	if( !context_->getFrameManager()->getTransform( msg->header, position, orientation ))
	{
		ROS_DEBUG( "Error transforming from frame '%s' to frame '%s'", msg->header.frame_id.c_str(), qPrintable( fixed_frame_ ));
	}

	Ogre::Matrix4 transform( orientation );
	transform.setTrans( position );

	if(links.size())
	{
		Ogre::ColourValue color;
		Ogre::ManualObject* manual_object = scene_manager_->createManualObject();
		manual_object->setDynamic( true );
		scene_node_->attachObject( manual_object );
		manual_objects_.push_back(manual_object);

		manual_object->estimateVertexCount(links.size() * 2);
		manual_object->begin( "BaseWhiteNoLighting", Ogre::RenderOperation::OT_LINE_LIST );
		for(std::map<int, rtabmap::Link>::iterator iter=links.begin(); iter!=links.end(); ++iter)
		{
			std::map<int, rtabmap::Transform>::iterator poseIterFrom = poses.find(iter->second.from());
			std::map<int, rtabmap::Transform>::iterator poseIterTo = poses.find(iter->second.to());
			if(poseIterFrom != poses.end() && poseIterTo != poses.end())
			{
				if(iter->second.type() == rtabmap::Link::kNeighbor)
				{
					color = color_neighbor_property_->getOgreColor();
				}
				else if(iter->second.type() == rtabmap::Link::kVirtualClosure)
				{
					color = color_virtual_property_->getOgreColor();
				}
				else if(iter->second.type() == rtabmap::Link::kUserClosure)
				{
					color = color_user_property_->getOgreColor();
				}
				else if(iter->second.type() == rtabmap::Link::kLocalSpaceClosure || iter->second.type() == rtabmap::Link::kLocalTimeClosure)
				{
					color = color_local_property_->getOgreColor();
				}
				else
				{
					color = color_global_property_->getOgreColor();
				}
				color.a = alpha_property_->getFloat();
				Ogre::Vector3 pos;
				pos = transform * Ogre::Vector3( poseIterFrom->second.x(), poseIterFrom->second.y(), poseIterFrom->second.z() );
				manual_object->position( pos.x, pos.y, pos.z );
				manual_object->colour( color );
				pos = transform * Ogre::Vector3( poseIterTo->second.x(), poseIterTo->second.y(), poseIterTo->second.z() );
				manual_object->position( pos.x, pos.y, pos.z );
				manual_object->colour( color );
			}
		}

		manual_object->end();
	}
}
예제 #8
0
void MapGraphDisplay::reset()
{
  MFDClass::reset();
  destroyObjects();
}
예제 #9
0
void MapGraphDisplay::onInitialize()
{
  MFDClass::onInitialize();
  destroyObjects();
}
예제 #10
0
MapGraphDisplay::~MapGraphDisplay()
{
	destroyObjects();
}
예제 #11
0
PathDisplay::~PathDisplay()
{
  destroyObjects();
}
예제 #12
0
파일: main.c 프로젝트: vvolkgang/YASS
void pressNormalKeys(unsigned char key, int x, int y)
{
	if(key == 27) // ESC
	{
		destroyObjects();
		exit(0);

	}
	else if(key == '1')
	{
		glPolygonMode(GL_FRONT_AND_BACK, GL_POINT);
	}
	else if(key == '2')
	{
		glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
	}
	else if(key == '3')
	{
		glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
	}
	else if(key == '4'){
		turnLinearFogOn();
		FOG_ON = 1;
	}
	else if(key == '5'){
		turnExpFogOn();
		FOG_ON = 1;
	}
	else if(key == '6'){
		turnExp2FogOn();
		FOG_ON = 1;
	}
	else if(key == '7'){
		glDisable(GL_FOG);
		FOG_ON = 0;
	}
	else if((key == 'A') || (key == 'a'))
	{
		_camera->deltaAnglev = 0.02f;
	}
	else if((key == 'Z') || (key == 'z'))
	{
		_camera->deltaAnglev = -0.02f;
	}
	else if((key == 'S') || (key == 's'))
	{
		_camera->deltaSpeed = 0.01f;
	}
	else if((key == 'X') || (key == 'x'))
	{
		_camera->deltaSpeed = -0.01f;
	}
	else if((key == 'N') || (key == 'n'))
	{
		glutLeaveGameMode();
		
		OGLWindow_initWindowMode();
		
				// Inicializações
		init();
		initCamera();
		initLights();
		initGameTime();
		SSController_Initialize();

		// Registar funções de callback
		glutDisplayFunc(display);
		glutReshapeFunc(reshape);
		glutIdleFunc(display);
		glutIgnoreKeyRepeat(1);
		glutKeyboardFunc(pressNormalKeys);
		glutKeyboardUpFunc(releaseNormalKeys);
		glutSpecialFunc(pressSpecialKey);
		glutSpecialUpFunc(releaseSpecialKey);
		glutMotionFunc(mouseMove);

	// - Directly redirect GLUT mouse button events to AntTweakBar
	glutMouseFunc((GLUTmousebuttonfun)TwEventMouseButtonGLUT);
	// - Directly redirect GLUT mouse "passive" motion events to AntTweakBar (same as MouseMotion)
	glutPassiveMotionFunc((GLUTmousemotionfun)TwEventMouseMotionGLUT);
	}
	else if((key == 'F') || (key == 'f'))
	{
		OGLWindow_initGameMode();
		
		// Inicializações
		init();
		initCamera();
		initLights();
		initGameTime();
		SSController_Initialize();

		// Registar funções de callback
		glutDisplayFunc(display);
		glutReshapeFunc(reshape);
		glutIdleFunc(display);
		glutIgnoreKeyRepeat(1);
		glutKeyboardFunc(pressNormalKeys);
		glutKeyboardUpFunc(releaseNormalKeys);
		glutSpecialFunc(pressSpecialKey);
		glutSpecialUpFunc(releaseSpecialKey);
		glutMotionFunc(mouseMove);

	// - Directly redirect GLUT mouse button events to AntTweakBar
	glutMouseFunc((GLUTmousebuttonfun)TwEventMouseButtonGLUT);
	// - Directly redirect GLUT mouse "passive" motion events to AntTweakBar (same as MouseMotion)
	glutPassiveMotionFunc((GLUTmousemotionfun)TwEventMouseMotionGLUT);

	} else if(key=='U' || key=='u') {
		TimeScale -= 10.0f;
	} else if(key=='I' || key=='i') {
		TimeScale += 10.0f;
	} else if(key=='O' || key=='o') {
		Planet_setOrbitVisibility(!Planet_getOrbitVisibility());
		orbits = !orbits;
	} else if(key=='C' || key=='c') {
		manualCam = !manualCam;
	}
}