Example #1
0
void Camera::move(Movement direction, float speed) {
	glm::vec3 translation;
	if (direction == LEFT) {
		translation = -getSideVector();
	}
	else if (direction == RIGHT) {
		translation = getSideVector();
	}
	else if (direction == UP) {
		translation = getOrthoUpVector();
	}
	else if (direction == DOWN) {
		translation = -getOrthoUpVector();
	}
	else if (direction == BACKWARD) {
		translation = -getLookVector();
	}
	else if (direction == FORWARD) { 
		translation = getLookVector();
	}
	
	translation = translation * m_Orientation * speed;
	m_Eye += translation;
	m_Center += translation;
}
/*!
 * \param ea
 * Adapter udalosti.
 * 
 * 
 * Funkcia vypocita poziciu kamery a zmensi rychlost pohybu.
 * 
 */
void CameraManipulator::frame( const osgGA::GUIEventAdapter &ea, osgGA::GUIActionAdapter &aa )
{
	osgViewer::Viewer* viewer = dynamic_cast<osgViewer::Viewer*>( &aa );

	double t1 = ea.getTime();

	if( t0 == 0.0 )
	{
		t0 = ea.getTime();
		dt = 0.0;
	}
	else
	{
		dt = t1 - t0;
		t0 = t1;
	}

	osg::Vec3d eye;
	osg::Vec3d center;
	osg::Vec3d up;

	viewer->getCamera()->getViewMatrixAsLookAt(eye, center, up);

	osg::Vec3d directionVec = center - eye;
	osg::Vec3d sideVec = getSideVector(osg::Matrixd(_rotation)); /* direction * osg::Matrix::rotate(-M_PI * 0.5, upVector);*/
	
	_center += ((directionVec * forwardSpeed) + (sideVec * sideSpeed) + (up * verticalSpeed)) * dt;

	if( decelerateSideRate )
	{
		sideSpeed *= speedDecelerationFactor;
	}
	if( decelerateForwardRate )
	{
		forwardSpeed *= speedDecelerationFactor;
	} 
	if (decelerateVerticalRate)
	{
		verticalSpeed *= speedDecelerationFactor;
	}
	if (deceleratePitchRate)
	{
		pitchSpeed *= speedDecelerationFactor;
	}
}