static void myRotateUpDown( ON_Viewport& viewport, double angle ) { // rotates camera around the screen x axis ON_3dVector camX; ON_3dPoint center; if ( glb_model ) center = glb_model->m_view.m_target; else viewport.GetFrustumCenter( center ); viewport.GetCameraFrame( NULL, camX, NULL, NULL ); myRotateView( viewport, camX, center, angle ); }
static void myRotateView( ON_Viewport& viewport, const ON_3dVector& axis, const ON_3dPoint& center, double angle ) { ON_Xform rot; ON_3dPoint camLoc; ON_3dVector camY, camZ; rot.Rotation( angle, axis, center ); if ( !viewport.GetCameraFrame( camLoc, NULL, camY, camZ ) ) return; camLoc = rot*camLoc; camY = rot*camY; camZ = -(rot*camZ); viewport.SetCameraLocation( camLoc ); viewport.SetCameraDirection( camZ ); viewport.SetCameraUp( camY ); ON_GL( viewport ); // update model view }