[Bf-blender-cvs] [a380ca2] soc-2014-fluid: passing obstacle flags to manta correctly
Roman Pogribnyi
noreply at git.blender.org
Sat Nov 15 15:06:04 CET 2014
Commit: a380ca2a63248b9d628652a24ab6b6b5f1bb1930
Author: Roman Pogribnyi
Date: Sat Nov 15 15:05:23 2014 +0100
Branches: soc-2014-fluid
https://developer.blender.org/rBa380ca2a63248b9d628652a24ab6b6b5f1bb1930
passing obstacle flags to manta correctly
===================================================================
M intern/smoke/intern/FLUID_3D.cpp
M intern/smoke/intern/FLUID_3D.h
M intern/smoke/intern/MANTA.cpp
M intern/smoke/intern/scenarios/smoke.h
M intern/smoke/intern/smoke_API.cpp
M source/blender/blenkernel/intern/smoke.c
===================================================================
diff --git a/intern/smoke/intern/FLUID_3D.cpp b/intern/smoke/intern/FLUID_3D.cpp
index a53c861..869ba12 100644
--- a/intern/smoke/intern/FLUID_3D.cpp
+++ b/intern/smoke/intern/FLUID_3D.cpp
@@ -514,6 +514,8 @@ _xRes(res[0]), _yRes(res[1]), _zRes(res[2]), _res(0.0f)
_zVelocityTemp = new float[_totalCells];
_densityTemp = new float[_totalCells];
+ //initializing manta flag grids
+ _manta_flags = NULL;
// DG TODO: check if alloc went fine
for (int x = 0; x < _totalCells; x++)
diff --git a/intern/smoke/intern/FLUID_3D.h b/intern/smoke/intern/FLUID_3D.h
index 4d10e1d..38dd48d 100644
--- a/intern/smoke/intern/FLUID_3D.h
+++ b/intern/smoke/intern/FLUID_3D.h
@@ -142,7 +142,7 @@ struct FLUID_3D
float *_color_bTemp;
bool using_colors;
-
+ int *_manta_flags;
// CG fields
int _iterations;
diff --git a/intern/smoke/intern/MANTA.cpp b/intern/smoke/intern/MANTA.cpp
index a6576d4..ff9c1ac 100644
--- a/intern/smoke/intern/MANTA.cpp
+++ b/intern/smoke/intern/MANTA.cpp
@@ -466,7 +466,10 @@ std::string Manta_API::getRealValue( const std::string& varName, SmokeModifierDa
ss << (-smd->domain->beta);
else if (varName == "ADVECT_ORDER")
ss << 2;
- else if (varName == "BOUNDCONDITIONS"){
+ else if (varName == "VORTICITY"){
+ cout << "Vorticity :" << smd->domain->vorticity / smd->domain->fluid->_constantScaling << endl;
+ ss << smd->domain->vorticity / smd->domain->fluid->_constantScaling;
+ }else if (varName == "BOUNDCONDITIONS"){
if(smd->domain->border_collisions == SM_BORDER_OPEN) ss << "xXyYz";
else if (smd->domain->border_collisions == SM_BORDER_VERTICAL) ss << "xXyYz";
else if (smd->domain->border_collisions == SM_BORDER_CLOSED) ss << "xXyYzZ";
@@ -586,6 +589,7 @@ void * Manta_API::pointerFromString(const std::string& s){
void Manta_API::updatePointers(FLUID_3D *fluid, bool updateColor)
{
fluid->_density = (float* )pointerFromString(getGridPointer("density", "s"));
+ fluid->_manta_flags = (int* )pointerFromString(getGridPointer("flags", "s"));
if (fluid->using_colors){
cout<< "POINTER FOR R_LOW" << fluid->_color_r<< endl;
fluid->_color_r = (float* )pointerFromString(getGridPointer("color_r_low", "s"));
diff --git a/intern/smoke/intern/scenarios/smoke.h b/intern/smoke/intern/scenarios/smoke.h
index 9822257..0095c5e 100644
--- a/intern/smoke/intern/scenarios/smoke.h
+++ b/intern/smoke/intern/scenarios/smoke.h
@@ -153,7 +153,8 @@ const string smoke_step_low = "def sim_step_low(t):\n\
#addBuoyancy(density=density, vel=vel, gravity=vec3($BUYO_X$,$BUYO_Y$,$BUYO_Z$), flags=flags)\n\
if manta_using_heat:\n\
addHeatBuoyancy(density=density, densCoeff = $ALPHA$, vel=vel, gravity=$GRAVITY$, flags=flags, heat = heat_low, heatCoeff = $BETA$*10)\n\
- #vorticityConfinement( vel=vel, flags=flags, strength=0.2 ) \n\
+ if $VORTICITY$ > 0.01:\n\
+ vorticityConfinement( vel=vel, flags=flags, strength=$VORTICITY$ ) \n\
addForceField(flags=flags, vel=vel,force=forces)\n\
\n\
solvePressure(flags=flags, vel=vel, pressure=pressure, useResNorm=True, openBound='$BOUNDCONDITIONS$')\n\
diff --git a/intern/smoke/intern/smoke_API.cpp b/intern/smoke/intern/smoke_API.cpp
index e5c5f9d..a428362 100644
--- a/intern/smoke/intern/smoke_API.cpp
+++ b/intern/smoke/intern/smoke_API.cpp
@@ -39,6 +39,10 @@
#include "../extern/smoke_API.h" /* to ensure valid prototypes */
+extern "C" int *smoke_get_manta_flags(struct FLUID_3D *fluid){
+ return fluid->_manta_flags;
+}
+
extern "C" FLUID_3D *smoke_init(int *res, float dx, float dtdef, int use_heat, int use_fire, int use_colors, struct SmokeModifierData *smd )
{
FLUID_3D *fluid = new FLUID_3D(res, dx, dtdef, use_heat, use_fire, use_colors,smd);
diff --git a/source/blender/blenkernel/intern/smoke.c b/source/blender/blenkernel/intern/smoke.c
index dadd98f..530e339 100644
--- a/source/blender/blenkernel/intern/smoke.c
+++ b/source/blender/blenkernel/intern/smoke.c
@@ -864,6 +864,7 @@ static void update_obstacles(Scene *scene, Object *ob, SmokeDomainSettings *sds,
unsigned int collIndex;
unsigned char *obstacles = smoke_get_obstacle(sds->fluid);
+ int *manta_obstacles = smoke_get_manta_flags(sds->fluid);
float *velx = NULL;
float *vely = NULL;
float *velz = NULL;
@@ -922,6 +923,7 @@ static void update_obstacles(Scene *scene, Object *ob, SmokeDomainSettings *sds,
if (obstacles[z])
{
manta_obs_sdf[z] = 1.;
+ manta_obstacles[z] = 2;/*manta obstacle flag*/
// velxOrig[z] = 0;
// velyOrig[z] = 0;
// velzOrig[z] = 0;
More information about the Bf-blender-cvs
mailing list