Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoman Pogribnyi <pogribnyi@gmail.com>2015-03-10 00:55:34 +0300
committerRoman Pogribnyi <pogribnyi@gmail.com>2015-03-10 00:55:34 +0300
commit2a1a6bc5720a4310e42a67754998e0480bf7c59b (patch)
tree6872a4bd0ea13622dad678f541b5cdb34fab7cfc
parentbf64cd1fd81f4021b8db476edbad4a7e45ae41ea (diff)
2D lowres smoke
-rw-r--r--intern/smoke/intern/MANTA.cpp22
-rw-r--r--source/blender/blenkernel/intern/smoke.c22
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);