Esempio n. 1
0
static void idle_func ( void )
{
	get_from_UI ( dens_prev, u_prev, v_prev );
	int idxX = N / 2;
	int idxY = 1;
	v[IX(idxX, idxY)] = force * 0.09f;
	vel_step ( N, u, v, u_prev, v_prev, visc, dt );
	dens_step ( N, dens, dens_prev, u, v, diff, dt );

	glutSetWindow ( win_id );
	glutPostRedisplay ();
}
Esempio n. 2
0
//-----------------------------------------------------------------------------
void StamFluidSolver::updatePhysics (  )
{
    /*
     //way to track FPS without having to modify main.cc so that extern float fpsReal is not necessary.
     const char* buf = Con::getVariable("fps::real");
     float fps = dAtof(buf);

     Con::warnf("FPS: %f", fps);
     */

    //get_from_UI ( dens_prev, u_prev, v_prev ); // NOTE that this used to be called before
    for(int i = 0; i < 5; i++) {
        int idx = _touchLocations[i];
        if(idx > -1 && idx < _gridCellsCount) {
            dens[idx] = 1.0f;
        }
    }
    // This code is a loop that was copied from get_from_UI
    /*
    for (int i=0 ; i<_gridCellsCount ; i++ ) {
    	u[i] = v[i] = 0.0f;
    	//r_prev[i] = g_prev[i] = b_prev[i] = 0.0f;
    }
    */

    vel_step ( u, v, u_prev, v_prev, visc, dt );



    if(!mTextureMorph) {
        // This code is a loop that was copied from get_from_UI
        for (int i=0 ; i<_gridCellsCount ; i++ ) {
            dens[i] *= 0.9f;
        }
        for (int i=0 ; i<_gridCellsCount ; i++ ) {
            dens_prev[i] *= 0.9f;
        }
        dens_step ( dens, dens_prev, u, v, diff, dt );

    }
    /*if(mSimulateTemperature)
    	texture_step ( N, temp, temp_prev, u, v, diff, dt );*/
    if(mTextureMorph) {
        texture_step ( texU, texU_prev, u, v, diff, dt );
        texture_step (texV, texV_prev, u, v, 0, dt );
    }


}
Esempio n. 3
0
 void update_fluid() {
     get_force_source( dens_prev, u_prev, v_prev, w_prev );
     vel_step ( M,N,O, u, v, w, u_prev, v_prev,w_prev, visc, dt );
     dens_step ( M,N,O, dens, dens_prev, u, v, w, diff, dt );
 }