1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| void VisuController::launchAnimation() {
// viewpoints list
std::list<ViewpointModel> * viewpoints = _viewpointController->getViewpoints();
// iterator
list<ViewpointModel>::iterator it;
//<<<<<<< .mine
// int scale = 200;
//=======
int scale = 40;
//>>>>>>> .r431
float dx, dy, dz, drotx, droty, drotz;
// for each point
for( it = (*viewpoints).begin(); it != (*viewpoints).end(); it++ ) {
// go to the current viewpoint
_camera.getOrigin()._x = (*it).getOrigin()._x ;
_camera.getOrigin()._y = (*it).getOrigin()._y ;
_camera.getOrigin()._z = (*it).getOrigin()._z ;
_camera.getRot()._x = (*it).getRot()._x ;
_camera.getRot()._y = (*it).getRot()._y ;
_camera.getRot()._z = (*it).getRot()._z ;
_view->updateGL();
// if it was the last, we stop
if( (++it) == (*viewpoints).end() )
break;
--it;
// calculate distance between each image
dx = ( (*(++it)).getOrigin()._x - (*(--it)).getOrigin()._x ) / scale;
dy = ( (*(++it)).getOrigin()._y - (*(--it)).getOrigin()._y ) / scale;
dz = ( (*(++it)).getOrigin()._z - (*(--it)).getOrigin()._z ) / scale;
drotx = ( (*(++it)).getRot()._x - (*(--it)).getRot()._x ) / scale;
droty = ( (*(++it)).getRot()._y - (*(--it)).getRot()._y ) / scale;
drotz = ( (*(++it)).getRot()._z - (*(--it)).getRot()._z ) / scale;
// move the camera
for( int i = 0; i < scale; i++ ) {
moveLeft( dx );
moveUp( dy );
zoomIn( dz );
lookUp( drotx );
lookLeft( droty );
_view->updateGL();
}
}
} |
Partager