[Bf-blender-cvs] [b391e96] master: Option for disabling the root frame transformation altogether, mostly for testing.

Lukas Tönne noreply at git.blender.org
Tue Jan 20 09:50:20 CET 2015


Commit: b391e963a98db4dded824e29e50147d754757a75
Author: Lukas Tönne
Date:   Fri Sep 12 11:22:39 2014 +0200
Branches: master
https://developer.blender.org/rBb391e963a98db4dded824e29e50147d754757a75

Option for disabling the root frame transformation altogether, mostly
for testing.

===================================================================

M	source/blender/blenkernel/intern/implicit.c
M	source/blender/blenkernel/intern/implicit.h

===================================================================

diff --git a/source/blender/blenkernel/intern/implicit.c b/source/blender/blenkernel/intern/implicit.c
index 78f615e..e8b78bd 100644
--- a/source/blender/blenkernel/intern/implicit.c
+++ b/source/blender/blenkernel/intern/implicit.c
@@ -806,43 +806,66 @@ int	implicit_free(ClothModifierData *clmd)
 /* x_root = R^T * x_world */
 BLI_INLINE void loc_world_to_root(float r[3], const float v[3], const RootTransform *root)
 {
+#ifdef CLOTH_ROOT_FRAME
 	sub_v3_v3v3(r, v, root->loc);
 	mul_transposed_m3_v3((float (*)[3])root->rot, r);
+#else
+	copy_v3_v3(r, v);
+	(void)root;
+#endif
 }
 
 /* x_world = R * x_root */
 BLI_INLINE void loc_root_to_world(float r[3], const float v[3], const RootTransform *root)
 {
+#ifdef CLOTH_ROOT_FRAME
 	copy_v3_v3(r, v);
 	mul_m3_v3((float (*)[3])root->rot, r);
 	add_v3_v3(r, root->loc);
+#else
+	copy_v3_v3(r, v);
+	(void)root;
+#endif
 }
 
 /* v_root = cross(w, x_root) + R^T*(v_world - v0) */
 BLI_INLINE void vel_world_to_root(float r[3], const float x_root[3], const float v[3], const RootTransform *root)
 {
+#ifdef CLOTH_ROOT_FRAME
 	float angvel[3];
 	cross_v3_v3v3(angvel, root->omega, x_root);
 	
 	sub_v3_v3v3(r, v, root->vel);
 	mul_transposed_m3_v3((float (*)[3])root->rot, r);
 	add_v3_v3(r, angvel);
+#else
+	copy_v3_v3(r, v);
+	(void)x_root;
+	(void)root;
+#endif
 }
 
 /* v_world = R*(v_root - cross(w, x_root)) + v0 */
 BLI_INLINE void vel_root_to_world(float r[3], const float x_root[3], const float v[3], const RootTransform *root)
 {
+#ifdef CLOTH_ROOT_FRAME
 	float angvel[3];
 	cross_v3_v3v3(angvel, root->omega, x_root);
 	
 	sub_v3_v3v3(r, v, angvel);
 	mul_m3_v3((float (*)[3])root->rot, r);
 	add_v3_v3(r, root->vel);
+#else
+	copy_v3_v3(r, v);
+	(void)x_root;
+	(void)root;
+#endif
 }
 
 /* a_root = -cross(dwdt, x_root) - 2*cross(w, v_root) - cross(w, cross(w, x_root)) + R^T*(a_world - a0) */
 BLI_INLINE void force_world_to_root(float r[3], const float x_root[3], const float v_root[3], const float force[3], float mass, const RootTransform *root)
 {
+#ifdef CLOTH_ROOT_FRAME
 	float euler[3], coriolis[3], centrifugal[3], rotvel[3];
 	
 	cross_v3_v3v3(euler, root->domega_dt, x_root);
@@ -856,11 +879,19 @@ BLI_INLINE void force_world_to_root(float r[3], const float x_root[3], const flo
 	madd_v3_v3fl(r, euler, mass);
 	madd_v3_v3fl(r, coriolis, mass);
 	madd_v3_v3fl(r, centrifugal, mass);
+#else
+	copy_v3_v3(r, force);
+	(void)x_root;
+	(void)v_root;
+	(void)mass;
+	(void)root;
+#endif
 }
 
 /* a_world = R*[ a_root + cross(dwdt, x_root) + 2*cross(w, v_root) + cross(w, cross(w, x_root)) ] + a0 */
 BLI_INLINE void force_root_to_world(float r[3], const float x_root[3], const float v_root[3], const float force[3], float mass, const RootTransform *root)
 {
+#ifdef CLOTH_ROOT_FRAME
 	float euler[3], coriolis[3], centrifugal[3], rotvel[3];
 	
 	cross_v3_v3v3(euler, root->domega_dt, x_root);
@@ -874,6 +905,13 @@ BLI_INLINE void force_root_to_world(float r[3], const float x_root[3], const flo
 	madd_v3_v3fl(r, centrifugal, mass);
 	mul_m3_v3((float (*)[3])root->rot, r);
 	madd_v3_v3fl(r, root->acc, mass);
+#else
+	copy_v3_v3(r, force);
+	(void)x_root;
+	(void)v_root;
+	(void)mass;
+	(void)root;
+#endif
 }
 
 BLI_INLINE void acc_world_to_root(float r[3], const float x_root[3], const float v_root[3], const float acc[3], const RootTransform *root)
@@ -903,6 +941,7 @@ BLI_INLINE void cross_v3_identity(float r[3][3], const float v[3])
 /* dfdx_root = m*[ -cross(dwdt, I) - cross(w, cross(w, I)) ] + R^T*(dfdx_world) */
 BLI_INLINE void dfdx_world_to_root(float m[3][3], float dfdx[3][3], float mass, const RootTransform *root)
 {
+#ifdef CLOTH_ROOT_FRAME
 	float t[3][3], u[3][3];
 	
 	copy_m3_m3(t, (float (*)[3])root->rot);
@@ -917,11 +956,17 @@ BLI_INLINE void dfdx_world_to_root(float m[3][3], float dfdx[3][3], float mass,
 	cross_m3_v3m3(t, root->omega, u);
 	mul_m3_fl(t, mass);
 	sub_m3_m3m3(m, m, t);
+#else
+	copy_m3_m3(m, dfdx);
+	(void)mass;
+	(void)root;
+#endif
 }
 
 /* dfdx_world = R*(dfdx_root + m*[ cross(dwdt, I) + cross(w, cross(w, I)) ]) */
 BLI_INLINE void dfdx_root_to_world(float m[3][3], float dfdx[3][3], float mass, const RootTransform *root)
 {
+#ifdef CLOTH_ROOT_FRAME
 	float t[3][3], u[3][3];
 	
 	cross_v3_identity(t, root->domega_dt);
@@ -934,11 +979,17 @@ BLI_INLINE void dfdx_root_to_world(float m[3][3], float dfdx[3][3], float mass,
 	add_m3_m3m3(m, m, t);
 	
 	mul_m3_m3m3(m, (float (*)[3])root->rot, m);
+#else
+	copy_m3_m3(m, dfdx);
+	(void)mass;
+	(void)root;
+#endif
 }
 
 /* dfdv_root = -2*m*cross(w, I) + R^T*(dfdv_world) */
 BLI_INLINE void dfdv_world_to_root(float m[3][3], float dfdv[3][3], float mass, const RootTransform *root)
 {
+#ifdef CLOTH_ROOT_FRAME
 	float t[3][3];
 	
 	copy_m3_m3(t, (float (*)[3])root->rot);
@@ -948,11 +999,17 @@ BLI_INLINE void dfdv_world_to_root(float m[3][3], float dfdv[3][3], float mass,
 	cross_v3_identity(t, root->omega);
 	mul_m3_fl(t, 2.0f*mass);
 	sub_m3_m3m3(m, m, t);
+#else
+	copy_m3_m3(m, dfdv);
+	(void)mass;
+	(void)root;
+#endif
 }
 
 /* dfdv_world = R*(dfdv_root + 2*m*cross(w, I)) */
 BLI_INLINE void dfdv_root_to_world(float m[3][3], float dfdv[3][3], float mass, const RootTransform *root)
 {
+#ifdef CLOTH_ROOT_FRAME
 	float t[3][3];
 	
 	cross_v3_identity(t, root->omega);
@@ -960,6 +1017,11 @@ BLI_INLINE void dfdv_root_to_world(float m[3][3], float dfdv[3][3], float mass,
 	add_m3_m3m3(m, dfdv, t);
 	
 	mul_m3_m3m3(m, (float (*)[3])root->rot, m);
+#else
+	copy_m3_m3(m, dfdv);
+	(void)mass;
+	(void)root;
+#endif
 }
 
 /* ================================ */
diff --git a/source/blender/blenkernel/intern/implicit.h b/source/blender/blenkernel/intern/implicit.h
index 144560e..31b8069 100644
--- a/source/blender/blenkernel/intern/implicit.h
+++ b/source/blender/blenkernel/intern/implicit.h
@@ -39,6 +39,8 @@
 //#define IMPLICIT_SOLVER_EIGEN
 #define IMPLICIT_SOLVER_BLENDER
 
+#define CLOTH_ROOT_FRAME /* enable use of root frame coordinate transform */
+
 #define CLOTH_FORCE_GRAVITY
 #define CLOTH_FORCE_DRAG
 #define CLOTH_FORCE_SPRING_STRUCTURAL




More information about the Bf-blender-cvs mailing list