[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