////////////////////////////////////////////////////// animation ////////////////////////////////////////////////////////////////// void OrbitCameraManipulator::applyAnimationStep( const double currentProgress, const double prevProgress ) { osg::Vec3d new_eye( m_animation_data->m_start_eye + (m_animation_data->m_target_eye - m_animation_data->m_start_eye) * (currentProgress) ); osg::Vec3d new_lookat( m_animation_data->m_start_lookat + (m_animation_data->m_target_lookat - m_animation_data->m_start_lookat) * (currentProgress) ); osg::Vec3d new_up( m_animation_data->m_start_up + (m_animation_data->m_target_up - m_animation_data->m_start_up) * (currentProgress) ); m_eye.set( new_eye ); m_lookat.set( new_lookat ); m_up.set( new_up ); }
void flitr::adjustCameraManipulatorHomeForYUp(osgGA::CameraManipulator* m) { m->home(0); osg::Vec3d home_eye, home_center, home_up; m->getHomePosition(home_eye, home_center, home_up); // rotate the center to eye vector osg::Quat q(osg::DegreesToRadians(90.0),osg::Vec3d(1,0,0)); osg::Vec3d new_eye = home_center + (q*(home_center-home_eye)); osg::Vec3d new_center(home_center); osg::Vec3d new_up(0,1,0); m->setHomePosition(new_eye, new_center, new_up); m->home(0); }