[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [13641] trunk/blender/source: Pointcache: Fixed non-availability when blend file was loaded from command line and also another case where you startet from an unsaved blend and switched to a saved one ; Cloth: Fixid mass init, little speedup for collisions; Collision Modifier : More generalized it
Daniel Genrich
daniel.genrich at gmx.net
Mon Feb 11 14:31:02 CET 2008
Revision: 13641
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=13641
Author: genscher
Date: 2008-02-11 14:30:52 +0100 (Mon, 11 Feb 2008)
Log Message:
-----------
Pointcache: Fixed non-availability when blend file was loaded from command line and also another case where you startet from an unsaved blend and switched to a saved one; Cloth: Fixid mass init, little speedup for collisions; Collision Modifier: More generalized it
Modified Paths:
--------------
trunk/blender/source/blender/blenkernel/BKE_cloth.h
trunk/blender/source/blender/blenkernel/BKE_collision.h
trunk/blender/source/blender/blenkernel/intern/cloth.c
trunk/blender/source/blender/blenkernel/intern/collision.c
trunk/blender/source/blender/blenkernel/intern/kdop.c
trunk/blender/source/blender/src/header_info.c
trunk/blender/source/creator/creator.c
Modified: trunk/blender/source/blender/blenkernel/BKE_cloth.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_cloth.h 2008-02-11 13:04:52 UTC (rev 13640)
+++ trunk/blender/source/blender/blenkernel/BKE_cloth.h 2008-02-11 13:30:52 UTC (rev 13641)
@@ -172,18 +172,13 @@
CLOTH_SPRING_FLAG_NEEDED = ( 1 << 2 ), // springs has values to be applied
} CLOTH_SPRINGS_FLAGS;
-typedef void ( *CM_COLLISION_RESPONSE ) ( ClothModifierData *clmd, CollisionModifierData *collmd, CollisionTree *tree1, CollisionTree *tree2 );
-
-
/////////////////////////////////////////////////
// collision.c
////////////////////////////////////////////////
// needed for implicit.c
-void bvh_collision_response ( ClothModifierData *clmd, ClothModifierData *coll_clmd, CollisionTree * tree1, CollisionTree * tree2 );
int cloth_bvh_objcollision ( ClothModifierData * clmd, float step, float dt );
-int bvh_traverse ( ClothModifierData * clmd, CollisionModifierData * collmd, CollisionTree * tree1, CollisionTree * tree2, float step, CM_COLLISION_RESPONSE collision_response );
////////////////////////////////////////////////
Modified: trunk/blender/source/blender/blenkernel/BKE_collision.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_collision.h 2008-02-11 13:04:52 UTC (rev 13640)
+++ trunk/blender/source/blender/blenkernel/BKE_collision.h 2008-02-11 13:30:52 UTC (rev 13641)
@@ -94,7 +94,21 @@
////////////////////////////////////////
+
////////////////////////////////////////
+// kdop.c
+////////////////////////////////////////
+
+// needed for collision.c
+typedef void ( *CM_COLLISION_RESPONSE ) ( ModifierData *md1, ModifierData *md2, CollisionTree *tree1, CollisionTree *tree2 );
+
+// needed for collision.c
+int bvh_traverse ( ModifierData * md1, ModifierData * md2, CollisionTree * tree1, CollisionTree * tree2, float step, CM_COLLISION_RESPONSE collision_response);
+int bvh_traverse_mt ( ModifierData * md1, ModifierData * md2, CollisionTree * tree1, CollisionTree * tree2, float step, CM_COLLISION_RESPONSE collision_response);
+////////////////////////////////////////////////
+////////////////////////////////////////
+
+////////////////////////////////////////
// used for collisions in kdop.c and also collision.c
////////////////////////////////////////
/* used for collisions in collision.c */
@@ -108,7 +122,7 @@
float pa[3], pb[3]; // collision point p1 on face1, p2 on face2
int lastsign; // indicates if the distance sign has changed, unused itm
float time; // collision time, from 0 up to 1
- unsigned int ap1, ap2, ap3, bp1, bp2, bp3, bp4;
+ unsigned int ap1, ap2, ap3, bp1, bp2, bp3;
unsigned int pointsb[4];
}
CollPair;
Modified: trunk/blender/source/blender/blenkernel/intern/cloth.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/cloth.c 2008-02-11 13:04:52 UTC (rev 13640)
+++ trunk/blender/source/blender/blenkernel/intern/cloth.c 2008-02-11 13:30:52 UTC (rev 13641)
@@ -171,6 +171,7 @@
clmd->coll_parms->loop_count = 3;
clmd->coll_parms->epsilon = 0.015f;
clmd->coll_parms->flags = CLOTH_COLLSETTINGS_FLAG_ENABLED;
+ clmd->coll_parms->collision_list = NULL;
/* These defaults are copied from softbody.c's
* softbody_calc_forces() function.
@@ -698,6 +699,9 @@
/* only force free the cache if we have a different number of verts */
if(clmd->clothObject && (numverts != clmd->clothObject->numverts ))
{
+ if(G.rt > 0)
+ printf("Force Freeing: numverts != clmd->clothObject->numverts\n");
+
clmd->sim_parms->flags |= CLOTH_SIMSETTINGS_FLAG_CCACHE_FFREE;
cloth_free_modifier ( ob, clmd );
}
@@ -742,12 +746,17 @@
// that's "first frame" and "last frame" on GUI
if ( current_time < clmd->sim_parms->firstframe )
{
+ if(G.rt > 0)
+ printf("current_time < clmd->sim_parms->firstframe\n");
return result;
}
else if ( current_time > clmd->sim_parms->lastframe )
{
int stack_index = modifiers_indexInObject(ob, (ModifierData *)clmd);
+ if(G.rt > 0)
+ printf("current_time > clmd->sim_parms->lastframe\n");
+
if(BKE_ptcache_id_exist((ID *)ob, clmd->sim_parms->lastcachedframe, stack_index))
{
if(cloth_read_cache(ob, clmd, clmd->sim_parms->lastcachedframe))
@@ -1171,7 +1180,8 @@
Mat4MulVecfl ( ob->obmat, verts->x );
}
- verts->mass = clmd->sim_parms->mass;
+ /* no GUI interface yet */
+ verts->mass = clmd->sim_parms->mass = 1.0f;
if ( clmd->sim_parms->flags & CLOTH_SIMSETTINGS_FLAG_GOAL )
verts->goal= clmd->sim_parms->defgoal;
Modified: trunk/blender/source/blender/blenkernel/intern/collision.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/collision.c 2008-02-11 13:04:52 UTC (rev 13640)
+++ trunk/blender/source/blender/blenkernel/intern/collision.c 2008-02-11 13:30:52 UTC (rev 13641)
@@ -557,8 +557,10 @@
return 1;
}
-void cloth_collision_static(ClothModifierData *clmd, CollisionModifierData *collmd, CollisionTree *tree1, CollisionTree *tree2)
+void cloth_collision_static(ModifierData *md1, ModifierData *md2, CollisionTree *tree1, CollisionTree *tree2)
{
+ ClothModifierData *clmd = (ClothModifierData *)md1;
+ CollisionModifierData *collmd = (CollisionModifierData *)md2;
CollPair *collpair = NULL;
Cloth *cloth1=NULL;
MFace *face1=NULL, *face2=NULL;
@@ -1004,7 +1006,7 @@
collision_move_object(collmd, step + dt, step);
- bvh_traverse(clmd, collmd, cloth_bvh->root, coll_bvh->root, step, cloth_collision_static);
+ bvh_traverse((ModifierData *)clmd, (ModifierData *)collmd, cloth_bvh->root, coll_bvh->root, step, cloth_collision_static);
}
else
printf ("cloth_bvh_objcollision: found a collision object with clothObject or collData NULL.\n");
@@ -1012,13 +1014,12 @@
// process all collisions (calculate impulses, TODO: also repulses if distance too short)
result = 1;
- for(j = 0; j < 10; j++) // 10 is just a value that ensures convergence
+ for(j = 0; j < 5; j++) // 5 is just a value that ensures convergence
{
result = 0;
if (collmd->tree)
result += cloth_collision_response_static(clmd, collmd);
-
// apply impulses in parallel
ic=0;
Modified: trunk/blender/source/blender/blenkernel/intern/kdop.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/kdop.c 2008-02-11 13:04:52 UTC (rev 13640)
+++ trunk/blender/source/blender/blenkernel/intern/kdop.c 2008-02-11 13:30:52 UTC (rev 13641)
@@ -72,6 +72,11 @@
#include "mydevice.h"
+#ifdef _OPENMP
+#include <omp.h>
+#endif
+
+
////////////////////////////////////////////////////////////////////////
// Additional fastened appending function
// It uses the link to the last inserted node as start value
@@ -670,7 +675,7 @@
* every other triangle that doesn't require any realloc, but uses
* much memory
*/
-int bvh_traverse ( ClothModifierData * clmd, CollisionModifierData * collmd, CollisionTree * tree1, CollisionTree * tree2, float step, CM_COLLISION_RESPONSE collision_response)
+int bvh_traverse ( ModifierData * md1, ModifierData * md2, CollisionTree * tree1, CollisionTree * tree2, float step, CM_COLLISION_RESPONSE collision_response)
{
int i = 0, ret=0;
@@ -693,7 +698,7 @@
// Provide the collision response.
if(collision_response)
- collision_response (clmd, collmd, tree1, tree2);
+ collision_response (md1, md2, tree1, tree2);
return 1;
}
else
@@ -702,7 +707,7 @@
for (i = 0; i < 4; i++)
{
// Only traverse nodes that exist.
- if (tree2->nodes[i] && bvh_traverse (clmd, collmd, tree1, tree2->nodes[i], step, collision_response))
+ if (tree2->nodes[i] && bvh_traverse (md1, md2, tree1, tree2->nodes[i], step, collision_response))
ret = 1;
}
}
@@ -713,7 +718,7 @@
for (i = 0; i < 4; i++)
{
// Only traverse nodes that exist.
- if (tree1->nodes [i] && bvh_traverse (clmd, collmd, tree1->nodes[i], tree2, step, collision_response))
+ if (tree1->nodes [i] && bvh_traverse (md1, md2, tree1->nodes[i], tree2, step, collision_response))
ret = 1;
}
}
Modified: trunk/blender/source/blender/src/header_info.c
===================================================================
--- trunk/blender/source/blender/src/header_info.c 2008-02-11 13:04:52 UTC (rev 13640)
+++ trunk/blender/source/blender/src/header_info.c 2008-02-11 13:30:52 UTC (rev 13641)
@@ -861,14 +861,19 @@
case 15: /* recover previous session */
{
extern short winqueue_break; /* editscreen.c */
- int save_over;
+ int save_over, retval = 0;
char str[FILE_MAXDIR+FILE_MAXFILE];
char scestr[FILE_MAXDIR+FILE_MAXFILE];
strcpy(scestr, G.sce); /* temporal store */
save_over = G.save_over;
BLI_make_file_string("/", str, U.tempdir, "quit.blend");
- BKE_read_file(str, NULL);
+ retval = BKE_read_file(str, NULL);
+
+ /*we successfully loaded a blend file, get sure that
+ pointcache works */
+ if (retval!=0) G.relbase_valid = 1;
+
G.save_over = save_over;
strcpy(G.sce, scestr);
Modified: trunk/blender/source/creator/creator.c
===================================================================
--- trunk/blender/source/creator/creator.c 2008-02-11 13:04:52 UTC (rev 13640)
+++ trunk/blender/source/creator/creator.c 2008-02-11 13:30:52 UTC (rev 13641)
@@ -759,8 +759,12 @@
}
if (G.background) {
- BKE_read_file(filename, NULL);
+ int retval = BKE_read_file(filename, NULL);
sound_initialize_sounds();
+
+ /*we successfully loaded a blend file, get sure that
+ pointcache works */
+ if (retval!=0) G.relbase_valid = 1;
/* happens for the UI on file reading too */
BKE_reset_undo();
More information about the Bf-blender-cvs
mailing list