void StereoscopicRenderingApp::renderUI() { float w = (float) getWindowWidth() * 0.5f; float h = (float) getWindowHeight(); std::string renderMode, focusMode; switch(mRenderMethod) { case MONO: renderMode = "Mono"; break; case SIDE_BY_SIDE: renderMode = "Side By Side"; break; case OVER_UNDER: renderMode = "Over Under"; break; case ANAGLYPH_RED_CYAN: renderMode = "Anaglyph Red Cyan"; break; case INTERLACED_HORIZONTAL: renderMode = "Interlaced Horizontal"; break; } switch(mFocusMethod) { case SET_CONVERGENCE: focusMode = "setConvergence(d, false)"; break; case SET_FOCUS: focusMode = "setConvergence(d, true)"; break; case AUTO_FOCUS: focusMode = "autoFocus(cam)"; break; } std::string labels( "Render mode (F1-F5):\nFocus mode (1-3):\nFocal Length:\nEye Distance:\nAuto Focus Depth (Up/Down):\nAuto Focus Speed (Left/Right):" ); boost::format values = boost::format( "%s\n%s\n%.2f\n%.2f\n%.2f\n%.2f" ) % renderMode % focusMode % mCamera.getConvergence() % mCamera.getEyeSeparation() % mAF.getDepth() % mAF.getSpeed(); #if(defined CINDER_MSW) gl::enableAlphaBlending(); gl::drawString( labels, Vec2f( w - 350.0f, h - 150.0f ), Color::black(), mFont ); gl::drawStringRight( values.str(), Vec2f( w + 350.0f, h - 150.0f ), Color::black(), mFont ); gl::disableAlphaBlending(); #else // \n is not supported on the mac, so we draw separate strings std::vector< std::string > left, right; left = ci::split( labels, "\n", false ); right = ci::split( values.str(), "\n", false ); gl::enableAlphaBlending(); for(size_t i=0;i<4;++i) { gl::drawString( left[i], Vec2f( w - 350.0f, h - 150.0f + i * mFont.getSize() * 0.9f ), Color::black(), mFont ); gl::drawStringRight( right[i], Vec2f( w + 350.0f, h - 150.0f + i * mFont.getSize() * 0.9f ), Color::black(), mFont ); } gl::disableAlphaBlending(); #endif }
void StereoscopicRenderingApp::keyDown( KeyEvent event ) { switch( event.getCode() ) { case KeyEvent::KEY_ESCAPE: quit(); break; case KeyEvent::KEY_f: // toggle full screen setFullScreen( ! isFullScreen() ); break; case KeyEvent::KEY_v: // toggle vertical sync gl::enableVerticalSync( !gl::isVerticalSyncEnabled() ); break; case KeyEvent::KEY_d: // toggle visualizer mDrawAutoFocus = !mDrawAutoFocus; break; case KeyEvent::KEY_u: // toggle interface mDrawUI = !mDrawUI; break; case KeyEvent::KEY_UP: // increase the parallax effect (towards negative parallax) if(mFocusMethod == AUTO_FOCUS) mAF.setDepth( mAF.getDepth() + 0.01f ); break; case KeyEvent::KEY_DOWN: // decrease the parallax effect (towards positive parallax) if(mFocusMethod == AUTO_FOCUS) mAF.setDepth( mAF.getDepth() - 0.01f ); break; case KeyEvent::KEY_SPACE: // reset the parallax effect to 'no parallax for the nearest object' mAF.setDepth( 1.0f ); break; case KeyEvent::KEY_LEFT: // reduce the auto focus speed mAF.setSpeed( mAF.getSpeed() - 0.01f ); break; case KeyEvent::KEY_RIGHT: // increase the auto focus speed mAF.setSpeed( mAF.getSpeed() + 0.01f ); break; case KeyEvent::KEY_1: mFocusMethod = SET_CONVERGENCE; break; case KeyEvent::KEY_2: mFocusMethod = SET_FOCUS; break; case KeyEvent::KEY_3: mFocusMethod = AUTO_FOCUS; break; case KeyEvent::KEY_F1: mRenderMethod = MONO; createFbo(); break; case KeyEvent::KEY_F2: mRenderMethod = ANAGLYPH_RED_CYAN; createFbo(); break; case KeyEvent::KEY_F3: mRenderMethod = SIDE_BY_SIDE; createFbo(); break; case KeyEvent::KEY_F4: mRenderMethod = OVER_UNDER; createFbo(); break; case KeyEvent::KEY_F5: mRenderMethod = INTERLACED_HORIZONTAL; createFbo(); break; } }