28 #include "../../common/math/WMath.h"
29 #include "../../common/math/linearAlgebra/WVectorFixed.h"
31 #include "../../common/WTimer.h"
33 #include "WGEAnimationManipulator.h"
36 m_matrix( osg::Matrixd::identity() ),
38 m_homeOffsetTime( timer->elapsed() ),
61 return osg::Matrixd::inverse(
m_matrix );
71 switch( ea.getEventType() )
73 case osgGA::GUIEventAdapter::FRAME:
76 case osgGA::GUIEventAdapter::KEYDOWN:
113 double degToRad(
double deg )
115 return deg * ( piDouble / 180.0 );
118 double radToDeg(
double rad )
120 return rad * ( 180.0 / piDouble );
123 template <
typename T >
137 template <
typename T >
138 T positive( T value )
140 return value > T( 0 ) ? 1 : 0;
153 double smooth(
double value,
double min,
double max )
164 double scaledValue = ( value - min ) / max;
165 return min + max * ( 0.5 * ( 1.0 + cos( piDouble + ( scaledValue * piDouble ) ) ) );
254 double rtime = positive( time - startTime ) * ( time - startTime );
255 double rangle = smooth( speed * rtime, 0.0, degree );
256 makeRotate( degToRad( rangle ), axes[0], axes[1], axes[2] );
275 Zoomer(
double time,
double startTime,
double factor,
double speed ):
279 double zfactor = abs( factor );
282 zfactor = 1.0 / factor;
289 double rtime = time - startTime;
290 double sfactor = 1.0 + smooth( ( speed * rtime ), 0.0, zfactor );
294 makeScale( 1.0 / sfactor, 1.0 / sfactor, 1.0 / sfactor );
298 makeScale( sfactor, sfactor, sfactor );
323 double rtime = time - startTime;
324 double scaler = smooth( speed * rtime, 0.0, 1.0 );
325 makeTranslate( ( direction * scaler ).
operator osg::Vec3d() );
337 osg::Matrixd mBBTranslate = osg::Matrixd::translate( -159.0 / 2.0, -199.0 / 2.0, -159.0 / 2.0 );
338 osg::Matrixd mBBScale = osg::Matrixd::scale( 1.5, 1.5, 1.5 );
339 osg::Matrixd mBBRotate = osg::Matrixd::rotate( -piDouble / 2.0, 1.0, 0.0, 0.0 ) *
340 osg::Matrixd::rotate( piDouble, 0.0, 1.0, 0.0 );
343 Rotator rotateToBack =
Rotator( elapsed, 0.0, Transformation::axeY, 360.0, 22.5 );
344 Rotator rotateToBottom =
Rotator( elapsed, rotateToBack.
finish() - 3.0, -1.0 * Transformation::axeX, 15.0, 5.0 );
348 Zoomer zoomToNei1 =
Zoomer( elapsed, translateABitUp.finish() - 2.0, 2.0, 0.15 );
349 Zoomer zoomToNaus =
Zoomer( elapsed, zoomToNei1.finish() + 1.0, 0.1, 3.0 );
350 Zoomer zoomToNei2 =
Zoomer( elapsed, zoomToNaus.finish(), 5.0, 1.5 );
352 m_matrix = mBBTranslate * mBBScale * mBBRotate * rotateToBack