コード例 #1
0
void CameraAnimator::setCameraIteration( bool ci )
{
    if ( m_cameraIteration != ci )
    {
        if ( ci )
        {
            // re-use to see if we found an appropriate camera
            ci = false;

            // assure, there are at least two FrustumCameras in the scene
            m_cameraIterationIndex = 0;
            dp::sg::core::FrustumCameraWeakPtr fsp = findNextIterationCamera();

            if( fsp )
            {
                moveToCamera( fsp );
                m_cameraIteration = true;
                ci = true;
            }
        }

        // if we are turning off camera iteration, or we didn't find a camera, then turn it off
        if( !ci )
        {
            m_cameraIteration = false;
            setCameraMoveTo( false );   // also stop any running move-to
        }
    }
}
コード例 #2
0
void
CameraAnimator::cancel()
{
    // set everything to false
    setCameraOrbit( false );
    setCameraMoveTo( false );
    setCameraIteration( false );
}
コード例 #3
0
void CameraAnimator::setCameraOrbit( bool co )
{
    if ( co )
    {
        // stop move-to and iteration, when orbit starts
        setCameraMoveTo( false );
        setCameraIteration( false );
    }
    startStopTimer( m_cameraOrbit, co, true );
}
コード例 #4
0
void CameraAnimator::timerEvent( QTimerEvent * te )
{
    if ( m_cameraIteration && ! m_cameraMoveTo )
    {
        if ( ! m_cameraIterationTimer.isRunning() )
        {
            m_cameraIterationTimer.restart();
        }
        else
        {
            double currentTime = m_cameraIterationTimer.getTime();
            if ( m_cameraIterationPauseDuration < currentTime )
            {
                m_cameraIterationTimer.stop();

                // move-to next camera
                dp::sg::core::FrustumCameraWeakPtr fsp = findNextIterationCamera();
                if( fsp )
                {
                    moveToCamera( fsp );
                }
            }
        }
    }
    else if ( m_cameraMoveTo )
    {
        DP_ASSERT( m_cameraMoveTimer.isRunning() );
        double currentTime = m_cameraMoveTimer.getTime();
        double t;
        double realDuration = m_cameraMoveDuration * m_cameraMoveDurationFactor;
        if ( realDuration < currentTime )
        {
            setCameraMoveTo( false );
            t = 1.0;
        }
        else
        {
            t = currentTime / realDuration;
            t = 0.5 * ( sin( -dp::math::PI_HALF + t * dp::math::PI ) + 1.0 );   // smooth-in and -out using simple sine curve
        }

        moveCamera( t );
        emit update();
    }
    else if ( m_cameraOrbit )
    {
        orbitCamera( m_cameraOrbitAxis, true, dp::math::degToRad(1.0f) );
        emit update();
    }
}
コード例 #5
0
void CameraAnimator::zoomAll()
{
    m_cameraMoveDurationFactor = 0.0;
    initCameraZoomAll();
    setCameraMoveTo( true );
}
コード例 #6
0
void CameraAnimator::moveToLight( const dp::sg::core::LightSourceWeakPtr & light )
{
    m_cameraMoveDurationFactor = 0.0;
    initCameraMoveToLight( light );
    setCameraMoveTo( true );
}
コード例 #7
0
void CameraAnimator::moveToCamera( const dp::sg::core::FrustumCameraWeakPtr & cam )
{
    m_cameraMoveDurationFactor = 0.0;
    initCameraMove( cam );
    setCameraMoveTo( true );
}
コード例 #8
0
ファイル: CameraAnimator.cpp プロジェクト: MatzJB/pipeline
void CameraAnimator::moveToCamera( dp::sg::core::FrustumCameraSharedPtr const& cam )
{
  m_cameraMoveDurationFactor = 0.0;
  initCameraMove( cam );
  setCameraMoveTo( true );
}