QTransform LayerCamera::getViewAtFrame(int frameNumber) { if ( keyFrameCount() == 0 ) { return QTransform(); } Camera* camera1 = static_cast< Camera* >( getLastKeyFrameAtPosition( frameNumber ) ); int nextFrame = getNextKeyFramePosition( frameNumber ); Camera* camera2 = static_cast< Camera* >( getLastKeyFrameAtPosition( nextFrame ) ); if (camera1 == NULL && camera2 == NULL) { return QTransform(); } else if (camera1 == NULL && camera2 != NULL) { return camera2->view; } else if (camera2 == NULL && camera1 != NULL) { return camera1->view; } if ( camera1 == camera2 ) { return camera1->view; } int frame1 = camera1->pos(); int frame2 = camera2->pos(); // linear interpolation qreal c2 = ( frameNumber - frame1 + 0.0 ) / ( frame2 - frame1 ); qreal c1 = 1.0 - c2; //qDebug() << ">> -- " << c1 << c2; auto interpolation = [=]( double f1, double f2 ) -> double { return f1 * c1 + f2 * c2; }; return QTransform( interpolation( camera1->view.m11(), camera2->view.m11() ), interpolation( camera1->view.m12(), camera2->view.m12() ), interpolation( camera1->view.m21(), camera2->view.m21() ), interpolation( camera1->view.m22(), camera2->view.m22() ), interpolation( camera1->view.dx(), camera2->view.dx() ), interpolation( camera1->view.dy(), camera2->view.dy() ) ); }
QMatrix LayerCamera::getViewAtFrame(int frameNumber) { if ( keyFrameCount() == 0 ) { return QMatrix(); } Camera* camera1 = static_cast< Camera* >( getLastKeyFrameAtPosition( frameNumber ) ); int nextFrame = getNextKeyFramePosition( frameNumber ); Camera* camera2 = static_cast< Camera* >( getLastKeyFrameAtPosition( nextFrame ) ); if (camera1 == NULL && camera2 == NULL) { return QMatrix(); } if (camera1 == NULL && camera2 != NULL) { return camera2->view; } if (camera2 == NULL && camera1 != NULL) { return camera1->view; } int frame1 = camera1->pos(); int frame2 = camera2->pos(); // linear interpolation qreal c2 = ( frameNumber - frame1 + 0.0 ) / ( frame2 - frame1 ); qreal c1 = 1.0 - c2; //qDebug() << ">> -- " << c1 << c2; return QMatrix( c1*camera1->view.m11() + c2*camera2->view.m11(), c1*camera1->view.m12() + c2*camera2->view.m12(), c1*camera1->view.m21() + c2*camera2->view.m21(), c1*camera1->view.m22() + c2*camera2->view.m22(), c1*camera1->view.dx() + c2*camera2->view.dx(), c1*camera1->view.dy() + c2*camera2->view.dy() ); }
Camera* LayerCamera::getLastCameraAtFrame(int frameNumber, int increment) { return static_cast< Camera* >( getLastKeyFrameAtPosition( frameNumber + increment ) ); }
VectorImage* LayerVector::getLastVectorImageAtFrame( int frameNumber, int increment ) { return static_cast< VectorImage* >( getLastKeyFrameAtPosition( frameNumber + increment ) ); }