void FaceApp::draw() { gl::setViewport( getWindowBounds() ); gl::clear(); gl::setMatricesWindow( getWindowSize() ); if ( mSurface ) { gl::color( Colorf::white() ); gl::enable( GL_TEXTURE_2D ); gl::TextureRef tex = gl::Texture::create( mSurface ); gl::draw( tex, tex->getBounds(), Rectf( getWindowBounds() ) ); gl::disable( GL_TEXTURE_2D ); gl::pushMatrices(); gl::scale( Vec2f( getWindowSize() ) / Vec2f( mSurface.getSize() ) ); for ( const Kinect2::Face3d& face : mFaces3d ) { const TriMesh& mesh = face.getMesh(); if ( mesh.getNumIndices() > 0 ) { vector<Vec2f> verts; for ( const Vec3f& i : mesh.getVertices() ) { Vec2f v = mDevice->mapCameraToColor( i ); verts.push_back( v ); } gl::lineWidth( 0.5f ); gl::enableWireframe(); TriMesh2d mesh2d; mesh2d.appendIndices( &mesh.getIndices()[ 0 ], mesh.getNumIndices() ); mesh2d.appendVertices( &verts[ 0 ], mesh.getNumVertices() ); gl::draw( mesh2d ); gl::disableWireframe(); } } if ( mEnabledFace3d ) { gl::color( Colorf( 1.0f, 0.0f, 0.0f ) ); } else { gl::lineWidth( 2.0f ); } for ( const Kinect2::Face2d& face : mFaces2d ) { if ( face.isTracked() ) { gl::drawStrokedRect( face.getBoundsColor() ); for ( const Vec2f& i : face.getPointsColor() ) { gl::drawSolidCircle( i, 3.0f, 16 ); } } } gl::popMatrices(); } mParams->draw(); }