uint32_t Config::startFrame() { // update head position if( _tracker.isRunning( )) { _tracker.update(); const eq::Matrix4f& headMatrix = _tracker.getMatrix(); _setHeadMatrix( headMatrix ); } float elapsed = _clock.getTimef(); _clock.reset(); updateFrameData( elapsed ); const eq::uint128_t version = _frameData.commit(); return eq::Config::startFrame( version ); }
void Config::_updateData() { // update head position if( _tracker.isRunning() ) { _tracker.update(); const eq::Matrix4f& headMatrix = _tracker.getMatrix(); _setHeadMatrix( headMatrix ); } // update camera if( _animation.isValid( )) { const eq::Vector3f& modelRotation = _animation.getModelRotation(); const CameraAnimation::Step& curStep = _animation.getNextStep(); _frameData.setModelRotation( modelRotation); _frameData.setRotation( curStep.rotation ); _frameData.setCameraPosition( curStep.position ); } else { if( _frameData.usePilotMode()) _frameData.spinCamera( -0.001f * _spinX, -0.001f * _spinY ); else _frameData.spinModel( -0.001f * _spinX, -0.001f * _spinY, 0.f ); _frameData.moveCamera( 0.0f, 0.0f, 0.001f * _advance ); } // idle mode if( isIdleAA( )) { LBASSERT( _numFramesAA > 0 ); _frameData.setIdle( true ); } else _frameData.setIdle( false ); _numFramesAA = 0; }
bool Config::_handleKeyEvent( const eq::KeyEvent& event ) { switch( event.key ) { case 'z': _adjustEyeBase( -0.1f ); return true; case 'Z': _adjustEyeBase( 0.1f ); return true; case 'y': _adjustModelScale( 0.1f ); return true; case 'Y': _adjustModelScale( 10.0f ); return true; case 't': _adjustTileSize( -1 ); return true; case 'T': _adjustTileSize( 1 ); return true; case 'u': _frameData.toggleCompression(); return true; case 'n': case 'N': _frameData.togglePilotMode(); return true; case ' ': stopFrames(); _spinX = 0; _spinY = 0; _advance = 0; _frameData.reset(); _setHeadMatrix( eq::Matrix4f::IDENTITY ); return true; case 'i': _useIdleAA = !_useIdleAA; return true; case 'k': { lunchbox::RNG rng; if( rng.get< bool >( )) _frameData.toggleOrtho(); if( rng.get< bool >( )) _frameData.toggleStatistics(); if( rng.get< bool >( )) _switchCanvas(); if( rng.get< bool >( )) _switchView(); if( rng.get< bool >( )) _switchLayout( 1 ); if( rng.get< bool >( )) _switchModel(); if( rng.get< bool >( )) eqAdmin::addWindow( _getAdminServer(), rng.get< bool >( )); if( rng.get< bool >( )) { eqAdmin::removeWindow( _getAdminServer( )); _currentCanvas = 0; } if( rng.get< bool >( )) _switchViewMode(); return true; } case 'o': case 'O': _frameData.toggleOrtho(); return true; case 's': case 'S': _frameData.toggleStatistics(); return true; case 'f': _freezeLoadBalancing( true ); return true; case 'F': _freezeLoadBalancing( false ); return true; case eq::KC_F1: case 'h': case 'H': _frameData.toggleHelp(); return true; case 'd': case 'D': _frameData.toggleColorMode(); return true; case 'q': _frameData.adjustQuality( -.1f ); return true; case 'Q': _frameData.adjustQuality( .1f ); return true; case 'c': case 'C': _switchCanvas(); return true; case 'v': case 'V': _switchView(); return true; case 'm': case 'M': _switchModel(); return true; case 'l': _switchLayout( 1 ); return true; case 'L': _switchLayout( -1 ); return true; case 'w': case 'W': _frameData.toggleWireframe(); return true; case 'r': case 'R': _frameData.toggleRenderMode(); return true; case 'g': case 'G': _switchViewMode(); return true; case 'a': eqAdmin::addWindow( _getAdminServer(), false /* active stereo */ ); return true; case 'p': eqAdmin::addWindow( _getAdminServer(), true /* passive stereo */ ); return true; case 'x': eqAdmin::removeWindow( _getAdminServer( )); _currentCanvas = 0; LBASSERT( update() ); return false; // Head Tracking Emulation case eq::KC_UP: { eq::Matrix4f headMatrix = _getHeadMatrix(); headMatrix.y() += 0.1f; _setHeadMatrix( headMatrix ); return true; } case eq::KC_DOWN: { eq::Matrix4f headMatrix = _getHeadMatrix(); headMatrix.y() -= 0.1f; _setHeadMatrix( headMatrix ); return true; } case eq::KC_RIGHT: { eq::Matrix4f headMatrix = _getHeadMatrix(); headMatrix.x() += 0.1f; _setHeadMatrix( headMatrix ); return true; } case eq::KC_LEFT: { eq::Matrix4f headMatrix = _getHeadMatrix(); headMatrix.x() -= 0.1f; _setHeadMatrix( headMatrix ); return true; } case eq::KC_PAGE_DOWN: { eq::Matrix4f headMatrix = _getHeadMatrix(); headMatrix.z() += 0.1f; _setHeadMatrix( headMatrix ); return true; } case eq::KC_PAGE_UP: { eq::Matrix4f headMatrix = _getHeadMatrix(); headMatrix.z() -= 0.1f; _setHeadMatrix( headMatrix ); return true; } case '.': { eq::Matrix4f headMatrix = _getHeadMatrix(); headMatrix.pre_rotate_x( .1f ); _setHeadMatrix( headMatrix ); return true; } case ',': { eq::Matrix4f headMatrix = _getHeadMatrix(); headMatrix.pre_rotate_x( -.1f ); _setHeadMatrix( headMatrix ); return true; } case ';': { eq::Matrix4f headMatrix = _getHeadMatrix(); headMatrix.pre_rotate_y( .1f ); _setHeadMatrix( headMatrix ); return true; } case '\'': { eq::Matrix4f headMatrix = _getHeadMatrix(); headMatrix.pre_rotate_y( -.1f ); _setHeadMatrix( headMatrix ); return true; } case '[': { eq::Matrix4f headMatrix = _getHeadMatrix(); headMatrix.pre_rotate_z( -.1f ); _setHeadMatrix( headMatrix ); return true; } case ']': { eq::Matrix4f headMatrix = _getHeadMatrix(); headMatrix.pre_rotate_z( .1f ); _setHeadMatrix( headMatrix ); return true; } case '+': _changeFocusDistance( .1f ); return true; case '-': _changeFocusDistance( -.1f ); return true; case '1': _setFocusMode( eq::FOCUSMODE_FIXED ); return true; case '2': _setFocusMode( eq::FOCUSMODE_RELATIVE_TO_ORIGIN ); return true; case '3': _setFocusMode( eq::FOCUSMODE_RELATIVE_TO_OBSERVER ); return true; case '4': _adjustResistance( 1 ); return true; case '5': _adjustResistance( -1 ); return true; case 'j': stopFrames(); return true; case 'e': _toggleEqualizer(); return true; default: return false; } }