void DelaunayMeshMaker::fileDrop( FileDropEvent event ){ try { mSurface = loadImage( event.getFile( 0 ) ); int width = mSurface.getWidth(); int height = mSurface.getHeight(); app::setWindowSize( width, height ); mFbo = gl::Fbo( width, height, false ); mBorderPoints.clear(); mBorderPoints.push_back( Vec2f::zero() ); mBorderPoints.push_back( Vec2f( (float)width, 0 ) ); mBorderPoints.push_back( Vec2f( (float)width ,(float)height ) ); mBorderPoints.push_back( Vec2f( 0 ,(float)height ) ); mSteinerPoints.clear(); mMesh.clear(); tesselate(); } catch( ... ) { console() << "unable to load the texture file!" << std::endl; }; }
static void genPlaneResult(unsigned int width, unsigned int height, ci::TriMesh& mesh) { mesh.clear(); float demiW = static_cast<float>(width / 2); float demiH = static_cast<float>(height / 2); for (float j = -demiH; j < demiH; ++j) { for (float i = -demiW; i < demiW; ++i) { mesh.appendVertex(ci::Vec3f(i, j, 0.0f)); mesh.appendTexCoord(ci::Vec2f( (i + demiW) / width, (j + demiH) / height )); } } //For create face algorithme size_t w = width - 1; size_t h = height - 1; for (size_t j = 0; j < h; ++j) { for (size_t i = 0; i < w; ++i) { mesh.appendTriangle(width * j + i, width * (j + 1) + i, width * j + i + 1); mesh.appendTriangle(width * j + i + 1, width * (j + 1) + i, width * (j + 1) + i + 1); } } }
void DelaunayMeshMaker::setup() { mSurface = loadImage( app::loadAsset( "texture0.jpg" ) ); int width = mSurface.getWidth(); int height = mSurface.getHeight(); app::setWindowSize( width, height ); mFbo = gl::Fbo( width, height, false ); mBorderPoints.push_back( Vec2f::zero() ); mBorderPoints.push_back( Vec2f( (float)width, 0 ) ); mBorderPoints.push_back( Vec2f( (float)width ,(float)height ) ); mBorderPoints.push_back( Vec2f( 0 ,(float)height ) ); mMesh.clear(); mParams = params::InterfaceGl( "Parameters", Vec2i( 300, 250 ) ); mParams.addParam( "Alpha", &mAlpha, "max=1.0 min=0.0 step=0.005" ); mParams.addParam( "Blend", &mBlend ); mParams.addParam( "Phong Shading", &mApplyPhongShading ); mParams.addParam( "Depth Offset", &mDepthOffset, "step=0.1" ); mParams.addParam( "Draw wireframe", &mDrawWireframe ); mParams.addSeparator(); mParams.addText("Edge detection"); mParams.addParam( "Edge detection scale down", &mScaleDown, "min=1" ); mParams.addParam( "Minimum threshold", &mCannyMinThreshold, "min=0.0f" ); mParams.addParam( "Maximum threshold", &mCannyMaxThreshold, "min=0.0f" ); mParams.addSeparator(); mParams.addButton( "Tesselate", std::bind( &DelaunayMeshMaker::tesselate, this ) ); mScaleDown = 8; mScaleDownPrev = mScaleDown; mCannyMinThreshold = 60.0; mCannyMaxThreshold = 70.0; mAlpha = 0.0f; mBlend = false; mApplyPhongShading = false; mDrawWireframe = false; mDepthOffset = 0.0f; mPrevDepthOffset = mDepthOffset; mPrevBlend = mBlend; mPhongShader = gl::GlslProg( loadAsset("phong_vert.glsl"), loadAsset("phong_frag.glsl") ); mEdgeDetectSurface = edgeDetect( Surface8u( mSurface ), mCannyMinThreshold, mCannyMaxThreshold, mScaleDownPrev ); mTesselator = Tesselator::makeTesselator(); mTesselator->sDone.connect( boost::bind( &DelaunayMeshMaker::onTesselationDone, this ) ); }