diff options
author | Erwin Coumans <blender@erwincoumans.com> | 2008-10-01 10:36:17 +0400 |
---|---|---|
committer | Erwin Coumans <blender@erwincoumans.com> | 2008-10-01 10:36:17 +0400 |
commit | aa5c4f8801f64f99be83eb419e9664f732650ede (patch) | |
tree | 9666a6eabf4f9772ccaf9725c1dca7f95dbcb518 | |
parent | e427b82962da85480f75c6d0c3e2cb4a88988727 (diff) |
+ hook up a few more parameters, that can be useful for Bullet soft bodies
+ work-in-progress to hook up cluster constraints (they are better than node/vertex pinning, because they maintain a proper world coordinate system)
-rw-r--r-- | source/blender/src/buttons_logic.c | 42 | ||||
-rw-r--r-- | source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.cpp | 104 |
2 files changed, 124 insertions, 22 deletions
diff --git a/source/blender/src/buttons_logic.c b/source/blender/src/buttons_logic.c index 9e6bc32d4b0..ba8116dbc5b 100644 --- a/source/blender/src/buttons_logic.c +++ b/source/blender/src/buttons_logic.c @@ -3004,9 +3004,9 @@ static uiBlock *advanced_bullet_menu(void *arg_ob) if (ob->bsoft) { xco = 0; - uiDefButF(block, NUMSLI, 0, "LinStiff ", xco, yco, 238, 19, + uiDefButF(block, NUMSLI, 0, "LinStiff", xco, yco, 238, 19, &ob->bsoft->linStiff, 0.0, 1.0, 1, 0, - "Linear stiffness of the soft body vertex spring"); + "Linear stiffness of the soft body links"); yco -= 25; xco = 0; @@ -3027,9 +3027,35 @@ static uiBlock *advanced_bullet_menu(void *arg_ob) xco+=120, yco, 118, 19, &ob->bsoft->collisionflags, 0, 0, 0, 0, "Enable cluster collision between soft and soft body"); yco -= 25; + xco = 0; + uiDefButI(block, NUM, REDRAWVIEW3D, "Clus.It.", + xco, yco, 118, 19, &ob->bsoft->numclusteriterations, 1.0, 128., + 0, 0, "Specify the number of cluster iterations"); + + uiDefButI(block, NUM, REDRAWVIEW3D, "piterations", + xco+=120, yco, 118, 19, &ob->bsoft->piterations, 0, 10, + 0, 0, "Position solver iterations"); + + yco -= 25; + xco = 0; + uiDefButF(block, NUMSLI, REDRAWVIEW3D, "Friction", + xco, yco, 118, 19, &ob->bsoft->kDF, 0.0, 1., + 0, 0, "Dynamic Friction"); + + uiDefButF(block, NUMSLI, REDRAWVIEW3D, "kMT", + xco+=120, yco, 118, 19, &ob->bsoft->kMT, 0, 1, + 0, 0, "Pose matching coefficient"); + + /* + //too complex tweaking, disable for now + uiDefButF(block, NUMSLI, REDRAWVIEW3D, "kVC", + xco+=80, yco, 80, 19, &ob->bsoft->kVC, 0, 100, + 0, 0, "Volume coefficient"); + */ xco = 0; /* +//would be a cool option, like leaves in the wind, need complex tweaking uiDefButBitI(block, TOG, OB_BSB_AERO_VTWOSIDE, 0, "Aero model", xco, yco, 118, 19, &ob->bsoft->flag, 0, 0, 0, 0, "Enable aero model, vertex normals are flipped to match velocity"); @@ -3037,18 +3063,6 @@ static uiBlock *advanced_bullet_menu(void *arg_ob) yco -= 25; */ - - - /* - uiDefButF(block, NUMSLI, 0, "AngStiff ", xco, yco, 238, 19, - &ob->bsoft->angStiff, 0.0, 1.0, 1, 0, - "Angular stiffness of the soft body vertex spring"); - yco -= 25; - uiDefButF(block, NUMSLI, 0, "Volume ", xco, yco, 238, 19, - &ob->bsoft->volume, 0.0, 1.0, 1, 0, - "Factor of soft body volume preservation"); - */ - } } else diff --git a/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.cpp b/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.cpp index 72caadadac5..91655e96101 100644 --- a/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.cpp +++ b/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.cpp @@ -1532,13 +1532,56 @@ int CcdPhysicsEnvironment::createConstraint(class PHY_IPhysicsController* ctrl int node=findClosestNode(sb0,pivotPointSoftWorld); if (node >=0) { - if (rb1) + bool clusterconstaint = false; +/* + switch (type) { - sb0->appendAnchor(node,rb1); - } else + case PHY_LINEHINGE_CONSTRAINT: + { + if (sb0->clusterCount() && rb1) + { + btSoftBody::LJoint::Specs ls; + ls.erp=0.5f; + ls.position=sb0->clusterCom(0); + sb0->appendLinearJoint(ls,rb1); + clusterconstaint = true; + break; + } + } + case PHY_GENERIC_6DOF_CONSTRAINT: + { + if (sb0->clusterCount() && rb1) + { + btSoftBody::AJoint::Specs as; + as.erp = 1; + as.cfm = 1; + as.axis.setValue(axisX,axisY,axisZ); + sb0->appendAngularJoint(as,rb1); + clusterconstaint = true; + break; + } + + break; + } + default: + { + + } + }; + */ + + if (!clusterconstaint) { - sb0->setMass(node,0.f); + if (rb1) + { + sb0->appendAnchor(node,rb1); + } else + { + sb0->setMass(node,0.f); + } } + + } return 0;//can't remove soft body anchors yet } @@ -1549,13 +1592,58 @@ int CcdPhysicsEnvironment::createConstraint(class PHY_IPhysicsController* ctrl int node=findClosestNode(sb1,pivotPointAWorld); if (node >=0) { - if (rb0) + bool clusterconstaint = false; + + /* + switch (type) { - sb1->appendAnchor(node,rb0); - } else + case PHY_LINEHINGE_CONSTRAINT: + { + if (sb1->clusterCount() && rb0) + { + btSoftBody::LJoint::Specs ls; + ls.erp=0.5f; + ls.position=sb1->clusterCom(0); + sb1->appendLinearJoint(ls,rb0); + clusterconstaint = true; + break; + } + } + case PHY_GENERIC_6DOF_CONSTRAINT: + { + if (sb1->clusterCount() && rb0) + { + btSoftBody::AJoint::Specs as; + as.erp = 1; + as.cfm = 1; + as.axis.setValue(axisX,axisY,axisZ); + sb1->appendAngularJoint(as,rb0); + clusterconstaint = true; + break; + } + + break; + } + default: + { + + + } + };*/ + + + if (!clusterconstaint) { - sb1->setMass(node,0.f); + if (rb0) + { + sb1->appendAnchor(node,rb0); + } else + { + sb1->setMass(node,0.f); + } } + + } return 0;//can't remove soft body anchors yet } |