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 (); }
//----------------------------------------------------------------------------- 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 ); } }
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 ); }