Revision: 19948
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=19948
Author:   ben2610
Date:     2009-04-27 18:44:02 +0200 (Mon, 27 Apr 2009)

Log Message:
-----------
BGE: Add soft body welding parameter to the Advanced Settings panel. The values 
are very small so I chose to use logarithmic scale. Should be fine, it's an 
advanced setting after all.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/bullet.c
    trunk/blender/source/blender/makesdna/DNA_object_force.h
    trunk/blender/source/blender/src/buttons_logic.c
    trunk/blender/source/gameengine/Converter/BL_BlenderDataConversion.cpp
    trunk/blender/source/gameengine/Ketsji/KX_ConvertPhysicsObject.h
    trunk/blender/source/gameengine/Ketsji/KX_ConvertPhysicsObjects.cpp
    trunk/blender/source/gameengine/Ketsji/KX_GameObject.cpp

Modified: trunk/blender/source/blender/blenkernel/intern/bullet.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/bullet.c     2009-04-27 
16:40:26 UTC (rev 19947)
+++ trunk/blender/source/blender/blenkernel/intern/bullet.c     2009-04-27 
16:44:02 UTC (rev 19948)
@@ -82,6 +82,7 @@
        bsb->collisionflags = 0;
        //bsb->collisionflags = OB_BSB_COL_CL_RS + OB_BSB_COL_CL_SS;
        bsb->numclusteriterations = 64;
+       bsb->welding = -4.f;
 
        return bsb;
 }

Modified: trunk/blender/source/blender/makesdna/DNA_object_force.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_object_force.h    2009-04-27 
16:40:26 UTC (rev 19947)
+++ trunk/blender/source/blender/makesdna/DNA_object_force.h    2009-04-27 
16:44:02 UTC (rev 19948)
@@ -119,7 +119,7 @@
        float   kAHR;                   /* Anchors hardness [0,1] */
        int             collisionflags; /* Vertex/Face or Signed Distance 
Field(SDF) or Clusters, Soft versus Soft or Rigid */
        int             numclusteriterations;   /* number of iterations to 
refine collision clusters*/
-
+       float   welding;                /* welding limit to remove 
duplicate/nearby vertices, 0.0000001..0.01 */
 } BulletSoftBody;
 
 /* BulletSoftBody.flag */

Modified: trunk/blender/source/blender/src/buttons_logic.c
===================================================================
--- trunk/blender/source/blender/src/buttons_logic.c    2009-04-27 16:40:26 UTC 
(rev 19947)
+++ trunk/blender/source/blender/src/buttons_logic.c    2009-04-27 16:44:02 UTC 
(rev 19948)
@@ -3073,19 +3073,19 @@
 {
        uiBlock *block;
        Object *ob = arg_ob;
-       short yco = 20, xco = 0;
+       short yco, xco = 0;
 
        block= uiNewBlock(&curarea->uiblocks, "advanced_bullet_options", 
UI_EMBOSS, UI_HELV, curarea->win);
        /* use this for a fake extra empy space around the buttons */
        
 
        if (ob->gameflag & OB_SOFT_BODY) {
-               uiDefBut(block, LABEL, 0, "", -10, -10, 380, 60, NULL, 0, 0, 0, 
0, "");
+               uiDefBut(block, LABEL, 0, "", -10, -10, 380, 80, NULL, 0, 0, 0, 
0, "");
 
                if (ob->bsoft)
                {
                        
-
+                       yco = 40;
                        uiBlockBeginAlign(block);
                        uiDefButBitI(block, TOG, OB_BSB_COL_CL_RS, 0, "Cluster 
Collision RS", 
                                xco, yco, 180, 19, &ob->bsoft->collisionflags, 
0, 0, 0, 0, 
@@ -3102,7 +3102,15 @@
                                xco+=180, yco, 180, 19, 
&ob->bsoft->piterations, 0, 10, 
                                0, 0, "Position solver iterations");
                        uiBlockEndAlign(block);
+                       yco -= 20;
+                       xco = 0;
+                       if (ob->bsoft->welding == 0.f)
+                               ob->bsoft->welding = -4.f;
 
+                       uiDefButF(block, NUMSLI, 0, "Welding(10^) ", 
+                               xco, yco, 360, 19, &ob->bsoft->welding, -7.f, 
-2.f, 10, 2, 
+                               "Threshold to remove duplicate/nearby vertices. 
Displayed in logarithmic scale for readability: linear values from 0.0000001 to 
0.01");
+
                        /*
                        //too complex tweaking, disable for now
                        uiDefButF(block, NUMSLI, REDRAWVIEW3D, "kVC",           
@@ -3131,7 +3139,7 @@
 
                if (ob->gameflag & OB_DYNAMIC) {
 
-                       yco = 100;
+                       yco = 80;
                        uiDefBut(block, LABEL, 0, "", -10, -10, 380, 120, NULL, 
0, 0, 0, 0, "");
                        uiBlockBeginAlign(block);
                        if (ob->margin < 0.001f)
@@ -3173,7 +3181,7 @@
                        
                        uiBlockEndAlign(block);
                        
-                       uiDefBut(block, LABEL, 0, "Clamp Velocity (zero 
disables)",       xco, yco, 180*2, 19, NULL, 0, 0, 0, 0, "");
+                       uiDefBut(block, LABEL, 0, "Clamp Velocity 
(0=disabled)",          xco, yco, 180*2, 19, NULL, 0, 0, 0, 0, "");
                        
                        uiBlockBeginAlign(block);
                        
@@ -3215,7 +3223,7 @@
 
 
                } else {
-                       
+                       yco = 20;
                        uiDefBut(block, LABEL, 0, "", -10, -10, 380, 60, NULL, 
0, 0, 0, 0, "");
                        uiDefButF(block, NUM, 0, "Margin", 
                                        xco, yco, 180, 19, &ob->margin, 0.0, 
1.0, 1, 0, 

Modified: trunk/blender/source/gameengine/Converter/BL_BlenderDataConversion.cpp
===================================================================
--- trunk/blender/source/gameengine/Converter/BL_BlenderDataConversion.cpp      
2009-04-27 16:40:26 UTC (rev 19947)
+++ trunk/blender/source/gameengine/Converter/BL_BlenderDataConversion.cpp      
2009-04-27 16:44:02 UTC (rev 19948)
@@ -1418,6 +1418,10 @@
                        objprop.m_soft_kAHR= blenderobject->bsoft->kAHR;        
                /* Anchors hardness [0,1] */
                        objprop.m_soft_collisionflags= 
blenderobject->bsoft->collisionflags;    /* Vertex/Face or Signed Distance 
Field(SDF) or Clusters, Soft versus Soft or Rigid */
                        objprop.m_soft_numclusteriterations= 
blenderobject->bsoft->numclusteriterations;        /* number of iterations to 
refine collision clusters*/
+                       if (blenderobject->bsoft->welding == 0.f)
+                               objprop.m_soft_welding = 0.0001f;               
/* welding */
+                       else
+                               objprop.m_soft_welding = 
pow(10.f,blenderobject->bsoft->welding);               /* welding */
                
                } else
                {
@@ -1457,6 +1461,7 @@
                        objprop.m_soft_kAHR= 0.7f;
                        objprop.m_soft_collisionflags= OB_BSB_COL_SDF_RS + 
OB_BSB_COL_VF_SS;
                        objprop.m_soft_numclusteriterations= 16;
+                       objprop.m_soft_welding = 0.0001f;
                }
        }
 

Modified: trunk/blender/source/gameengine/Ketsji/KX_ConvertPhysicsObject.h
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_ConvertPhysicsObject.h    
2009-04-27 16:40:26 UTC (rev 19947)
+++ trunk/blender/source/gameengine/Ketsji/KX_ConvertPhysicsObject.h    
2009-04-27 16:44:02 UTC (rev 19948)
@@ -124,6 +124,7 @@
        float   m_soft_kAHR;                    /* Anchors hardness [0,1] */
        int             m_soft_collisionflags;  /* Vertex/Face or Signed 
Distance Field(SDF) or Clusters, Soft versus Soft or Rigid */
        int             m_soft_numclusteriterations;    /* number of iterations 
to refine collision clusters*/
+       float   m_soft_welding;                 /*   threshold to remove 
duplicate/nearby vertices */
 
        /////////////////////////
        

Modified: trunk/blender/source/gameengine/Ketsji/KX_ConvertPhysicsObjects.cpp
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_ConvertPhysicsObjects.cpp 
2009-04-27 16:40:26 UTC (rev 19947)
+++ trunk/blender/source/gameengine/Ketsji/KX_ConvertPhysicsObjects.cpp 
2009-04-27 16:44:02 UTC (rev 19948)
@@ -905,7 +905,9 @@
 
                                // Soft bodies require welding. Only avoid 
remove doubles for non-soft bodies!
                                if (objprop->m_softbody)
-                                       
shapeInfo->setVertexWeldingThreshold1(0.0001f); //todo: expose this to the UI
+                               {
+                                       
shapeInfo->setVertexWeldingThreshold1(objprop->m_soft_welding); //todo: expose 
this to the UI
+                               }
 
                                bm = shapeInfo->CreateBulletShape();
                                //no moving concave meshes, so don't bother 
calculating inertia

Modified: trunk/blender/source/gameengine/Ketsji/KX_GameObject.cpp
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_GameObject.cpp    2009-04-27 
16:40:26 UTC (rev 19947)
+++ trunk/blender/source/gameengine/Ketsji/KX_GameObject.cpp    2009-04-27 
16:44:02 UTC (rev 19948)
@@ -462,11 +462,11 @@
 
 void KX_GameObject::UpdateTransform()
 {
-       if (m_pPhysicsController1)
-               // only update the transform of static object, dynamic object 
are handled differently
-               // note that for bullet, this does not even update the 
transform of static object
+       // HACK: saves function call for dynamic object, they are handled 
differently
+       if (m_pPhysicsController1 && !m_pPhysicsController1->IsDyna())
+               // Note that for Bullet, this does not even update the 
transform of static object
                // but merely sets there collision flag to "kinematic" because 
the synchronization is 
-               // done differently during physics simulation
+               // done during physics simulation
                m_pPhysicsController1->SetSumoTransform(true);
        if (m_pGraphicController)
                // update the culling tree


_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to