[Plib-cvs] plib/examples/src/ssg/viewer viewer.cxx,1.23,1.24
Brought to you by:
sjbaker
From: Wolfram K. <wol...@us...> - 2004-10-25 20:53:38
|
Update of /cvsroot/plib/plib/examples/src/ssg/viewer In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv25402 Modified Files: viewer.cxx Log Message: Implemented fluid animation Index: viewer.cxx =================================================================== RCS file: /cvsroot/plib/plib/examples/src/ssg/viewer/viewer.cxx,v retrieving revision 1.23 retrieving revision 1.24 diff -u -d -r1.23 -r1.24 --- viewer.cxx 1 Sep 2002 12:04:52 -0000 1.23 +++ viewer.cxx 25 Oct 2004 20:53:29 -0000 1.24 @@ -262,11 +262,32 @@ int num = ta -> getNum () ; if ( num > 0 ) { +#ifdef DISCREET_STEPS int frame = anim_frame ; if ( frame >= num ) frame = num-1 ; ta -> selection = frame ; p -> setTransform ( *( ta -> get ( ta -> selection ) ) ) ; +#else + /* fluid motion */ + int curr_time = glutGet((GLenum)GLUT_ELAPSED_TIME); // in ms + int nFrame = curr_time / 1000; + int frac = curr_time -1000*nFrame; + float tFrame, tFrameP1; + tFrame = frac / 1000.0f; + tFrameP1 = 1.0 - tFrame; + nFrame = nFrame - (num-1) * (nFrame/(num-1)); + assert(nFrame<num-1); + { + sgMat4 XForm, *pmFrame; + pmFrame = ta -> get ( nFrame ); + sgMat4 *pmFrameP1 = ta -> get ( nFrame+1 ); + for(int i=0;i<4;i++) + for(int j=0; j<4; j++) + XForm[i][j] = tFrame * ((*pmFrame)[i][j]) + tFrameP1 * ((*pmFrameP1)[i][j]); + p -> setTransform ( XForm ); + } +#end } } } |