diff options
author | Roman Pogribnyi <pogribnyi@gmail.com> | 2015-03-10 00:55:34 +0300 |
---|---|---|
committer | Roman Pogribnyi <pogribnyi@gmail.com> | 2015-03-10 00:55:34 +0300 |
commit | 2a1a6bc5720a4310e42a67754998e0480bf7c59b (patch) | |
tree | 6872a4bd0ea13622dad678f541b5cdb34fab7cfc | |
parent | bf64cd1fd81f4021b8db476edbad4a7e45ae41ea (diff) |
2D lowres smoke
-rw-r--r-- | intern/smoke/intern/MANTA.cpp | 22 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/smoke.c | 22 |
2 files changed, 25 insertions, 19 deletions
diff --git a/intern/smoke/intern/MANTA.cpp b/intern/smoke/intern/MANTA.cpp index 1ebabc74436..6772fb44759 100644 --- a/intern/smoke/intern/MANTA.cpp +++ b/intern/smoke/intern/MANTA.cpp @@ -603,6 +603,7 @@ void * Manta_API::pointerFromString(const std::string& s){ void Manta_API::updatePointers(FLUID_3D *fluid, bool updateColor) { + //blender_to_manta: whether we copy data from blender density/velocity field to mantaflow or the other way around /*in 2D case, we want to copy in the Z-axis field that is in the middle of X and Y axes */ //x + y * max_x + z * max_x*max_y // int position_to_copy_from(0 + (fluid->xRes()/2) * fluid->xRes() + (fluid->zRes()/2) * fluid->xRes()*fluid->yRes()); @@ -618,17 +619,16 @@ void Manta_API::updatePointers(FLUID_3D *fluid, bool updateColor) } } int step = 0; - for (int cnt(0); cnt < fluid->xRes() * fluid->zRes()-1; ++cnt){ - assert(fluid->_yLocation != -1); - step = int(fluid->_yRes * 0.5) * fluid->_xRes + - (cnt % (fluid->_xRes)) + - int(cnt/(fluid->_xRes)) * fluid->_xRes * fluid->_yRes; - if ((step < 0) || (step > fluid->_totalCells)){ - cout << "UpdatePointers: step is larger tahn cell dim" << step << endl; - } - fluid->_density[step] = manta_fluid_density[cnt]; - fluid->_manta_flags[step] = manta_fluid_flags[cnt]; - } + for (int cnty(0);cnty<fluid->yRes(); ++cnty) + for(int cntz(0);cntz<fluid->zRes(); ++cntz) + { + step = fluid->xRes() + cnty * fluid->xRes() + cntz * fluid->xRes()*fluid->yRes(); + if ((step < 0) || (step > fluid->_totalCells)){ + cout << "UpdatePointers: step is larger tahn cell dim" << step << endl; + } + fluid->_density[step] = manta_fluid_density[cnty + cntz*fluid->xRes()]; + fluid->_manta_flags[step] = manta_fluid_flags[cnty + cntz*fluid->xRes()]; + } } else{ fluid->_density = (float* )pointerFromString(getGridPointer("density", "s")); diff --git a/source/blender/blenkernel/intern/smoke.c b/source/blender/blenkernel/intern/smoke.c index 0884ca2a5d6..306c5b0c791 100644 --- a/source/blender/blenkernel/intern/smoke.c +++ b/source/blender/blenkernel/intern/smoke.c @@ -2301,14 +2301,7 @@ static void update_flowsfluids(Scene *scene, Object *ob, SmokeDomainSettings *sd if(sds->manta_solver_res == 3){ apply_inflow_fields(sfs, emission_map[e_index], d_index, inflow_grid, heat, fuel, react, color_r, color_g, color_b); } - else{ /*2D solver*/ - int cell_cnt; - for (cell_cnt=0; cell_cnt< sds->res_max[0] * sds->res_max[2]-1; ++cell_cnt ){ - int step = cell_index_3D(cell_cnt, sds->res_max[0], sds->res_max[1], sds->res_max[2]); - inflow_grid[cell_cnt] = density[step]; - } - } - /* initial velocity */ + /* initial velocity */ if (sfs->flags & MOD_SMOKE_FLOW_INITVELOCITY) { velocity_x[d_index] = ADD_IF_LOWER(velocity_x[d_index], velocity_map[e_index * 3]); velocity_y[d_index] = ADD_IF_LOWER(velocity_y[d_index], velocity_map[e_index * 3 + 1]); @@ -2402,6 +2395,19 @@ static void update_flowsfluids(Scene *scene, Object *ob, SmokeDomainSettings *sd } // hires loop } // bigdensity } // low res loop + + { /*2D solver*/ + int cnty; + int cntz; + int step; + for ( cnty=0;cnty<sds->res_max[1]; ++cnty) + for( cntz=0;cntz<sds->res_max[2]; ++cntz) + { + step = sds->res_max[0]/2 + cnty * sds->res_max[0] + cntz * sds->res_max[0]*sds->res_max[1]; + inflow_grid[cnty + cntz*sds->res_max[0]] = density[step]; + } + } + if((sds->flags & MOD_SMOKE_USE_MANTA) && (bigdensity)){ // manta_write_emitters(sfs,true,0,0,0,bigres[0], bigres[1], bigres[2], bigres[0], bigres[1], bigres[2],manta_big_inflow_sdf, NULL); MEM_freeN(manta_big_inflow_sdf); |