void WarpPerspective::draw( bool controls ) { // only draw grid while editing if( isEditModeEnabled() ) { gl::pushModelMatrix(); gl::multModelMatrix( getTransform() ); gl::ScopedGlslProg shader( gl::getStockShader( gl::ShaderDef().color() ) ); gl::ScopedLineWidth linewidth( 1.0f ); glHint( GL_LINE_SMOOTH_HINT, GL_NICEST ); gl::ScopedColor color( Color::white() ); for( int i = 0; i <= 1; i++ ) { float s = i / 1.0f; gl::drawLine( vec2( s * (float)mWidth, 0.0f ), vec2( s * (float)mWidth, (float)mHeight ) ); gl::drawLine( vec2( 0.0f, s * (float)mHeight ), vec2( (float)mWidth, s * (float)mHeight ) ); } gl::drawLine( vec2( 0.0f, 0.0f ), vec2( (float)mWidth, (float)mHeight ) ); gl::drawLine( vec2( (float)mWidth, 0.0f ), vec2( 0.0f, (float)mHeight ) ); gl::popModelMatrix(); if( controls && mSelected < mPoints.size() ) { // draw control points for( int i = 0; i < 4; i++ ) queueControlPoint( mDestination[i], i == mSelected ); drawControlPoints(); } } }
void Warp::queueControlPoint( const vec2 &pt, bool selected, bool attached ) { float scale = 0.9f + 0.2f * math<float>::sin( 6.0f * float( app::getElapsedSeconds() - mSelectedTime ) ); if( selected && attached ) { queueControlPoint( pt, Color( 0.0f, 0.8f, 0.0f ) ); } else if( selected ) { queueControlPoint( pt, Color( 0.9f, 0.9f, 0.9f ), scale ); } else if( attached ) { queueControlPoint( pt, Color( 0.0f, 0.4f, 0.0f ) ); } else { queueControlPoint( pt, Color( 0.4f, 0.4f, 0.4f ) ); } }
void WarpPerspectiveBilinear::draw( bool controls ) { // apply perspective transform gl::pushModelMatrix(); gl::multModelMatrix( mWarp->getTransform() ); // draw bilinear warp WarpBilinear::draw( false ); // restore transform gl::popModelMatrix(); // draw edit interface if( isEditModeEnabled() ) { if( controls && mSelected < mPoints.size() ) { // draw control points for( unsigned i = 0; i < mPoints.size(); ++i ) queueControlPoint( getControlPoint( i ) * mWindowSize, mSelected == i ); drawControlPoints(); } } }