[Bf-blender-cvs] [6d0efb5] temp_merge_gooseberry_hair: Moved "set_positions" for cloth out of core implicit solver.
Lukas Tönne
noreply at git.blender.org
Mon Jan 19 20:48:59 CET 2015
Commit: 6d0efb531df3c18edda948bd75b5efe6d19895b6
Author: Lukas Tönne
Date: Sun Sep 14 13:23:14 2014 +0200
Branches: temp_merge_gooseberry_hair
https://developer.blender.org/rB6d0efb531df3c18edda948bd75b5efe6d19895b6
Moved "set_positions" for cloth out of core implicit solver.
API for the solver now has functions for setting of vertex motion state
and the associated root transform data.
===================================================================
M source/blender/physics/BPH_mass_spring.h
M source/blender/physics/intern/BPH_mass_spring.cpp
M source/blender/physics/intern/implicit.h
M source/blender/physics/intern/implicit_blender.c
===================================================================
diff --git a/source/blender/physics/BPH_mass_spring.h b/source/blender/physics/BPH_mass_spring.h
index 8382d0b..14c03d8 100644
--- a/source/blender/physics/BPH_mass_spring.h
+++ b/source/blender/physics/BPH_mass_spring.h
@@ -28,7 +28,12 @@
#ifndef __BPH_MASS_SPRING_H__
#define __BPH_MASS_SPRING_H__
+#ifdef __cplusplus
+extern "C" {
+#endif
+
struct Implicit_Data;
+struct ClothModifierData;
struct Implicit_Data *BPH_mass_spring_solver_create(int numverts, int numsprings);
void BPH_mass_spring_solver_free(struct Implicit_Data *id);
@@ -36,8 +41,12 @@ void BPH_mass_spring_solver_free(struct Implicit_Data *id);
int BPH_cloth_solver_init(struct Object *ob, struct ClothModifierData *clmd);
void BPH_cloth_solver_free(struct ClothModifierData *clmd);
int BPH_cloth_solve(struct Object *ob, float frame, struct ClothModifierData *clmd, struct ListBase *effectors);
-void BKE_cloth_solver_set_positions (struct ClothModifierData *clmd );
+void BKE_cloth_solver_set_positions(struct ClothModifierData *clmd);
bool implicit_hair_volume_get_texture_data(struct Object *UNUSED(ob), struct ClothModifierData *clmd, struct ListBase *UNUSED(effectors), struct VoxelData *vd);
+#ifdef __cplusplus
+}
+#endif
+
#endif
diff --git a/source/blender/physics/intern/BPH_mass_spring.cpp b/source/blender/physics/intern/BPH_mass_spring.cpp
index e69de29..4c8c5a3 100644
--- a/source/blender/physics/intern/BPH_mass_spring.cpp
+++ b/source/blender/physics/intern/BPH_mass_spring.cpp
@@ -0,0 +1,61 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * The Original Code is Copyright (C) Blender Foundation
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): Lukas Toenne
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file blender/blenkernel/intern/BPH_mass_spring.c
+ * \ingroup bph
+ */
+
+#include "DNA_scene_types.h"
+#include "DNA_object_types.h"
+#include "DNA_meshdata_types.h"
+#include "DNA_modifier_types.h"
+
+#include "BLI_math.h"
+#include "BLI_linklist.h"
+#include "BLI_utildefines.h"
+
+#include "BKE_cloth.h"
+
+#include "BPH_mass_spring.h"
+#include "implicit.h"
+
+void BKE_cloth_solver_set_positions(ClothModifierData *clmd)
+{
+ Cloth *cloth = clmd->clothObject;
+ ClothVertex *verts = cloth->verts;
+ unsigned int numverts = cloth->numverts, i;
+ ClothHairRoot *cloth_roots = clmd->roots;
+ Implicit_Data *id = cloth->implicit;
+ const float ZERO[3] = {0.0f, 0.0f, 0.0f};
+
+ for (i = 0; i < numverts; i++) {
+ ClothHairRoot *root = &cloth_roots[i];
+
+ BPH_mass_spring_set_root_motion(id, i, root->loc, ZERO, root->rot, ZERO);
+ BPH_mass_spring_set_motion_state(id, i, verts[i].x, verts[i].v);
+ }
+}
diff --git a/source/blender/physics/intern/implicit.h b/source/blender/physics/intern/implicit.h
index edddd1b..66d91d7 100644
--- a/source/blender/physics/intern/implicit.h
+++ b/source/blender/physics/intern/implicit.h
@@ -36,6 +36,10 @@
#include "BLI_utildefines.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+
//#define IMPLICIT_SOLVER_EIGEN
#define IMPLICIT_SOLVER_BLENDER
@@ -52,9 +56,18 @@
//#define IMPLICIT_ENABLE_EIGEN_DEBUG
+struct Implicit_Data;
+
BLI_INLINE void implicit_print_matrix_elem(float v)
{
printf("%-8.3f", v);
}
+void BPH_mass_spring_set_root_motion(struct Implicit_Data *data, int index, const float loc[3], const float vel[3], float rot[3][3], const float angvel[3]);
+void BPH_mass_spring_set_motion_state(struct Implicit_Data *data, int index, const float x[3], const float v[3]);
+
+#ifdef __cplusplus
+}
+#endif
+
#endif
diff --git a/source/blender/physics/intern/implicit_blender.c b/source/blender/physics/intern/implicit_blender.c
index 2dbb1eb..20b85cd 100644
--- a/source/blender/physics/intern/implicit_blender.c
+++ b/source/blender/physics/intern/implicit_blender.c
@@ -2714,29 +2714,38 @@ int BPH_cloth_solve(Object *ob, float frame, ClothModifierData *clmd, ListBase *
return 1;
}
-void BKE_cloth_solver_set_positions(ClothModifierData *clmd)
+void BPH_mass_spring_set_root_motion(Implicit_Data *data, int index, const float loc[3], const float vel[3], float rot[3][3], const float angvel[3])
{
- Cloth *cloth = clmd->clothObject;
- ClothVertex *verts = cloth->verts;
- unsigned int numverts = cloth->numverts, i;
- ClothHairRoot *cloth_roots = clmd->roots;
- Implicit_Data *id = cloth->implicit;
+ RootTransform *root = &data->root[index];
- for (i = 0; i < numverts; i++) {
#ifdef CLOTH_ROOT_FRAME
- copy_v3_v3(id->root[i].loc, cloth_roots[i].loc);
- copy_m3_m3(id->root[i].rot, cloth_roots[i].rot);
+ copy_v3_v3(root->loc, loc);
+ copy_v3_v3(root->vel, vel);
+ copy_m3_m3(root->rot, rot);
+ copy_v3_v3(root->omega, angvel);
+ /* XXX root frame acceleration ignored for now */
+ zero_v3(root->acc);
+ zero_v3(root->domega_dt);
#else
- zero_v3(id->root[i].loc);
- unit_m3(id->root[i].rot);
- (void)cloth_roots;
+ zero_v3(root->loc);
+ zero_v3(root->vel);
+ unit_m3(root->rot);
+ zero_v3(root->omega);
+ zero_v3(root->acc);
+ zero_v3(root->domega_dt);
+ (void)loc;
+ (void)vel;
+ (void)rot;
+ (void)angvel;
#endif
-
- loc_world_to_root(id->X[i], verts[i].x, &id->root[i]);
- vel_world_to_root(id->V[i], id->X[i], verts[i].v, &id->root[i]);
- }
- if (G.debug_value > 0)
- printf("implicit_set_positions\n");
+}
+
+void BPH_mass_spring_set_motion_state(Implicit_Data *data, int index, const float x[3], const float v[3])
+{
+ RootTransform *root = &data->root[index];
+
+ loc_world_to_root(data->X[index], x, root);
+ vel_world_to_root(data->V[index], data->X[index], v, root);
}
#endif /* IMPLICIT_SOLVER_BLENDER */
More information about the Bf-blender-cvs
mailing list