////////////////////////////////////////////////////// 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 );
}
示例#2
0
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);
}