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; } }