void Fluid2DParticlesApp::keyDown( KeyEvent event ) { switch( event.getCode() ) { case KeyEvent::KEY_r: mFluid2D.initSimData(); break; } }
void Fluid2DParticleSoupApp::setup() { glEnable( GL_TEXTURE_2D ); mDenScale = 50; mRgbScale = 40; mFluid2D.set( 192, 192 ); mFluid2D.setDensityDissipation( 0.99f ); mFluid2D.setRgbDissipation( 0.99f ); mVelScale = 3.0f*std::max( mFluid2D.resX(), mFluid2D.resY() ); mParams = params::InterfaceGl( "Params", Vec2i( 300, 400 ) ); mParams.addParam( "Stam Step", mFluid2D.stamStepAddr() ); mParams.addSeparator(); mParams.addParam( "Velocity Input Scale", &mVelScale, "min=0 max=10000 step=1" ); mParams.addParam( "Density Input Scale", &mDenScale, "min=0 max=1000 step=1" ); mParams.addParam( "Rgb Input Scale", &mRgbScale, "min=0 max=1000 step=1" ); mParams.addSeparator(); mParams.addParam( "Velocity Dissipation", mFluid2D.velocityDissipationAddr(), "min=0.0001 max=1 step=0.0001" ); mParams.addParam( "Density Dissipation", mFluid2D.densityDissipationAddr(), "min=0.0001 max=1 step=0.0001" ); mParams.addParam( "Rgb Dissipation", mFluid2D.rgbDissipationAddr(), "min=0.0001 max=1 step=0.0001" ); mParams.addSeparator(); mParams.addParam( "Velocity Viscosity", mFluid2D.velocityViscosityAddr(), "min=0.000001 max=10 step=0.000001" ); mParams.addParam( "Density Viscosity", mFluid2D.densityViscosityAddr(), "min=0.000001 max=10 step=0.000001" ); mParams.addParam( "Rgb Viscosity", mFluid2D.rgbViscosityAddr(), "min=0.000001 max=10 step=0.000001" ); mParams.addSeparator(); mParams.addParam( "Vorticity Confinement", mFluid2D.enableVorticityConfinementAddr() ); mParams.addSeparator(); std::vector<std::string> boundaries; boundaries.push_back( "None" ); boundaries.push_back( "Wall" ); boundaries.push_back( "Wrap" ); mParams.addParam( "Boundary Type", boundaries, mFluid2D.boundaryTypeAddr() ); mParams.addSeparator(); mParams.addParam( "Enable Buoyancy", mFluid2D.enableBuoyancyAddr() ); mParams.addParam( "Buoyancy Scale", mFluid2D.buoyancyScaleAddr(), "min=0 max=100 step=0.001" ); mParams.addParam( "Vorticity Scale", mFluid2D.vorticityScaleAddr(), "min=0 max=1 step=0.001" ); mFluid2D.setRgbDissipation( 0.9930f ); mFluid2D.enableDensity(); mFluid2D.enableRgb(); mFluid2D.enableVorticityConfinement(); mFluid2D.initSimData(); mParticleSoup.setup( &mFluid2D ); mColor = Colorf( 0.98f, 0.7f, 0.4f ); }
void Fluid2DCamAppApp::setup() { glEnable( GL_TEXTURE_2D ); mVelThreshold = 0.75f; mNumActiveFlowVectors = 0; #if defined( CINDER_MSW ) mVelScale = 0.5f; mDenScale = 0.0025f; #elif defined( CINDER_MAC ) mVelScale = 2.0f; mDenScale = 0.007f; #endif mFluid2D.set( mFluid2DResX, mFluid2DResY ); mFluid2D.enableDensity(); mFluid2D.enableVorticityConfinement(); mFluid2D.setNumPressureIters( 24 ); mFluid2D.initSimData(); // Create these so we can create the textures ahead of time mSurfVel0 = Surface32f( mFluid2DResX, mFluid2DResY, false, SurfaceChannelOrder::RGB ); mSurfVel1 = Surface32f( mFluid2DResX, mFluid2DResY, false, SurfaceChannelOrder::RGB ); mChanDen0 = Channel32f( mFluid2DResX, mFluid2DResY ); mChanDen1 = Channel32f( mFluid2DResX, mFluid2DResY ); mChanDiv = Channel32f( mFluid2DResX, mFluid2DResY ); mChanPrs = Channel32f( mFluid2DResX, mFluid2DResY ); mChanCurl = Channel32f( mFluid2DResX, mFluid2DResY ); mChanCurlLen = Channel32f( mFluid2DResX, mFluid2DResY ); mTexVel0 = gl::Texture( mSurfVel0 ); mTexVel1 = gl::Texture( mSurfVel1 ); mTexDen0 = gl::Texture( mChanDen0 ); mTexDen1 = gl::Texture( mChanDen1 ); mTexDiv = gl::Texture( mChanDiv ); mTexPrs = gl::Texture( mChanPrs ); mTexCurl = gl::Texture( mChanCurl ); mTexCurlLen = gl::Texture( mChanCurlLen ); mParams = params::InterfaceGl( "Params", Vec2i( 300, 400 ) ); mParams.addParam( "Stam Step", mFluid2D.stamStepAddr() ); mParams.addSeparator(); mParams.addParam( "Velocity Threshold", &mVelThreshold, "min=0 max=2 step=0.001" ); mParams.addSeparator(); mParams.addParam( "Velocity Input Scale", &mVelScale, "min=0 max=10 step=0.001" ); mParams.addParam( "Density Input Scale", &mDenScale, "min=0 max=1 step=0.0001" ); mParams.addSeparator(); mParams.addParam( "Velocity Dissipation", mFluid2D.velocityDissipationAddr(), "min=0 max=1 step=0.0001" ); mParams.addParam( "Density Dissipation", mFluid2D.densityDissipationAddr(), "min=0 max=1 step=0.0001" ); mParams.addSeparator(); mParams.addParam( "Velocity Viscosity", mFluid2D.velocityViscosityAddr(), "min=0 max=10 step=0.000001" ); mParams.addParam( "Density Viscosity", mFluid2D.densityViscosityAddr(), "min=0 max=10 step=0.000001" ); mParams.addSeparator(); mParams.addParam( "Vorticity Confinement", mFluid2D.enableVorticityConfinementAddr() ); mParams.addSeparator(); std::vector<std::string> boundaries; boundaries.push_back( "None" ); boundaries.push_back( "Wall" ); boundaries.push_back( "Wrap" ); mParams.addParam( "Boundary Type", boundaries, mFluid2D.boundaryTypeAddr() ); mParams.addSeparator(); mParams.addParam( "Enable Buoyancy", mFluid2D.enableBuoyancyAddr() ); mParams.addParam( "Buoyancy Scale", mFluid2D.buoyancyScaleAddr(), "min=0 max=100 step=0.001" ); mParams.addParam( "Vorticity Scale", mFluid2D.vorticityScaleAddr(), "min=0 max=1 step=0.001" ); // Camera try { mCapture = Capture( 640, 480 ); mCapture.start(); } catch( ... ) { console() << "Failed to initialize capture" << std::endl; } }