Merge branch 'master' of https://github.com/erwincoumans/bullet3
This commit is contained in:
@@ -104,6 +104,8 @@ void ClothFriction::initPhysics()
|
|||||||
btVector3 gravity = btVector3(0, -10, 0);
|
btVector3 gravity = btVector3(0, -10, 0);
|
||||||
m_dynamicsWorld->setGravity(gravity);
|
m_dynamicsWorld->setGravity(gravity);
|
||||||
getDeformableDynamicsWorld()->getWorldInfo().m_gravity = gravity;
|
getDeformableDynamicsWorld()->getWorldInfo().m_gravity = gravity;
|
||||||
|
getDeformableDynamicsWorld()->getWorldInfo().m_sparsesdf.setDefaultVoxelsz(0.25);
|
||||||
|
getDeformableDynamicsWorld()->getWorldInfo().m_sparsesdf.Reset();
|
||||||
|
|
||||||
m_guiHelper->createPhysicsDebugDrawer(m_dynamicsWorld);
|
m_guiHelper->createPhysicsDebugDrawer(m_dynamicsWorld);
|
||||||
|
|
||||||
|
|||||||
@@ -182,7 +182,7 @@ void DeformableContact::initPhysics()
|
|||||||
psb2->setTotalMass(1);
|
psb2->setTotalMass(1);
|
||||||
psb2->m_cfg.kKHR = 1; // collision hardness with kinematic objects
|
psb2->m_cfg.kKHR = 1; // collision hardness with kinematic objects
|
||||||
psb2->m_cfg.kCHR = 1; // collision hardness with rigid body
|
psb2->m_cfg.kCHR = 1; // collision hardness with rigid body
|
||||||
psb2->m_cfg.kDF = 0.1;
|
psb2->m_cfg.kDF = 0;
|
||||||
psb2->m_cfg.collisions = btSoftBody::fCollision::SDF_RD;
|
psb2->m_cfg.collisions = btSoftBody::fCollision::SDF_RD;
|
||||||
psb2->m_cfg.collisions |= btSoftBody::fCollision::VF_DD;
|
psb2->m_cfg.collisions |= btSoftBody::fCollision::VF_DD;
|
||||||
psb->translate(btVector3(3.5,0,0));
|
psb->translate(btVector3(3.5,0,0));
|
||||||
|
|||||||
@@ -113,6 +113,8 @@ void DeformableMultibody::initPhysics()
|
|||||||
btVector3 gravity = btVector3(0, -10, 0);
|
btVector3 gravity = btVector3(0, -10, 0);
|
||||||
m_dynamicsWorld->setGravity(gravity);
|
m_dynamicsWorld->setGravity(gravity);
|
||||||
getDeformableDynamicsWorld()->getWorldInfo().m_gravity = gravity;
|
getDeformableDynamicsWorld()->getWorldInfo().m_gravity = gravity;
|
||||||
|
getDeformableDynamicsWorld()->getWorldInfo().m_sparsesdf.setDefaultVoxelsz(0.25);
|
||||||
|
getDeformableDynamicsWorld()->getWorldInfo().m_sparsesdf.Reset();
|
||||||
m_guiHelper->createPhysicsDebugDrawer(m_dynamicsWorld);
|
m_guiHelper->createPhysicsDebugDrawer(m_dynamicsWorld);
|
||||||
|
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -154,6 +154,8 @@ void DeformableRigid::initPhysics()
|
|||||||
btVector3 gravity = btVector3(0, -10, 0);
|
btVector3 gravity = btVector3(0, -10, 0);
|
||||||
m_dynamicsWorld->setGravity(gravity);
|
m_dynamicsWorld->setGravity(gravity);
|
||||||
getDeformableDynamicsWorld()->getWorldInfo().m_gravity = gravity;
|
getDeformableDynamicsWorld()->getWorldInfo().m_gravity = gravity;
|
||||||
|
getDeformableDynamicsWorld()->getWorldInfo().m_sparsesdf.setDefaultVoxelsz(0.25);
|
||||||
|
getDeformableDynamicsWorld()->getWorldInfo().m_sparsesdf.Reset();
|
||||||
|
|
||||||
// getDeformableDynamicsWorld()->before_solver_callbacks.push_back(dynamics);
|
// getDeformableDynamicsWorld()->before_solver_callbacks.push_back(dynamics);
|
||||||
m_guiHelper->createPhysicsDebugDrawer(m_dynamicsWorld);
|
m_guiHelper->createPhysicsDebugDrawer(m_dynamicsWorld);
|
||||||
|
|||||||
@@ -166,6 +166,7 @@ void DeformableSelfCollision::initPhysics()
|
|||||||
psb->m_cfg.collisions = btSoftBody::fCollision::SDF_RD;
|
psb->m_cfg.collisions = btSoftBody::fCollision::SDF_RD;
|
||||||
psb->m_cfg.collisions |= btSoftBody::fCollision::VF_DD;
|
psb->m_cfg.collisions |= btSoftBody::fCollision::VF_DD;
|
||||||
getDeformableDynamicsWorld()->addSoftBody(psb);
|
getDeformableDynamicsWorld()->addSoftBody(psb);
|
||||||
|
psb->setSelfCollision(true);
|
||||||
|
|
||||||
btDeformableMassSpringForce* mass_spring = new btDeformableMassSpringForce(10,0.2, true);
|
btDeformableMassSpringForce* mass_spring = new btDeformableMassSpringForce(10,0.2, true);
|
||||||
getDeformableDynamicsWorld()->addForce(psb, mass_spring);
|
getDeformableDynamicsWorld()->addForce(psb, mass_spring);
|
||||||
|
|||||||
@@ -112,9 +112,9 @@ void dynamics2(btScalar time, btDeformableMultiBodyDynamicsWorld* world)
|
|||||||
if (rbs.size()<2)
|
if (rbs.size()<2)
|
||||||
return;
|
return;
|
||||||
btRigidBody* rb0 = rbs[0];
|
btRigidBody* rb0 = rbs[0];
|
||||||
btScalar pressTime = 0.9;
|
btScalar pressTime = 0.45;
|
||||||
btScalar liftTime = 10;
|
btScalar liftTime = 5;
|
||||||
btScalar shiftTime = 3.5;
|
btScalar shiftTime = 1.75;
|
||||||
btScalar holdTime = 4.5*1000;
|
btScalar holdTime = 4.5*1000;
|
||||||
btScalar dropTime = 5.3*1000;
|
btScalar dropTime = 5.3*1000;
|
||||||
btTransform rbTransform;
|
btTransform rbTransform;
|
||||||
@@ -124,9 +124,9 @@ void dynamics2(btScalar time, btDeformableMultiBodyDynamicsWorld* world)
|
|||||||
|
|
||||||
btVector3 initialTranslationLeft = btVector3(0.5,3,4);
|
btVector3 initialTranslationLeft = btVector3(0.5,3,4);
|
||||||
btVector3 initialTranslationRight = btVector3(0.5,3,-4);
|
btVector3 initialTranslationRight = btVector3(0.5,3,-4);
|
||||||
btVector3 PinchFrictionVelocityLeft = btVector3(0,0,-1);
|
btVector3 PinchFrictionVelocityLeft = btVector3(0,0,-2);
|
||||||
btVector3 PinchFrictionVelocityRight = btVector3(0,0,1);
|
btVector3 PinchFrictionVelocityRight = btVector3(0,0,2);
|
||||||
btVector3 liftVelocity = btVector3(0,1,0);
|
btVector3 liftVelocity = btVector3(0,2,0);
|
||||||
btVector3 shiftVelocity = btVector3(0,0,0);
|
btVector3 shiftVelocity = btVector3(0,0,0);
|
||||||
btVector3 holdVelocity = btVector3(0,0,0);
|
btVector3 holdVelocity = btVector3(0,0,0);
|
||||||
btVector3 openVelocityLeft = btVector3(0,0,4);
|
btVector3 openVelocityLeft = btVector3(0,0,4);
|
||||||
@@ -230,7 +230,8 @@ void PinchFriction::initPhysics()
|
|||||||
btVector3 gravity = btVector3(0, -10, 0);
|
btVector3 gravity = btVector3(0, -10, 0);
|
||||||
m_dynamicsWorld->setGravity(gravity);
|
m_dynamicsWorld->setGravity(gravity);
|
||||||
getDeformableDynamicsWorld()->getWorldInfo().m_gravity = gravity;
|
getDeformableDynamicsWorld()->getWorldInfo().m_gravity = gravity;
|
||||||
|
getDeformableDynamicsWorld()->getWorldInfo().m_sparsesdf.setDefaultVoxelsz(0.25);
|
||||||
|
getDeformableDynamicsWorld()->getWorldInfo().m_sparsesdf.Reset();
|
||||||
getDeformableDynamicsWorld()->setSolverCallback(dynamics2);
|
getDeformableDynamicsWorld()->setSolverCallback(dynamics2);
|
||||||
m_guiHelper->createPhysicsDebugDrawer(m_dynamicsWorld);
|
m_guiHelper->createPhysicsDebugDrawer(m_dynamicsWorld);
|
||||||
|
|
||||||
|
|||||||
@@ -169,6 +169,8 @@ void VolumetricDeformable::initPhysics()
|
|||||||
btVector3 gravity = btVector3(0, -100, 0);
|
btVector3 gravity = btVector3(0, -100, 0);
|
||||||
m_dynamicsWorld->setGravity(gravity);
|
m_dynamicsWorld->setGravity(gravity);
|
||||||
getDeformableDynamicsWorld()->getWorldInfo().m_gravity = gravity;
|
getDeformableDynamicsWorld()->getWorldInfo().m_gravity = gravity;
|
||||||
|
getDeformableDynamicsWorld()->getWorldInfo().m_sparsesdf.setDefaultVoxelsz(0.25);
|
||||||
|
getDeformableDynamicsWorld()->getWorldInfo().m_sparsesdf.Reset();
|
||||||
m_guiHelper->createPhysicsDebugDrawer(m_dynamicsWorld);
|
m_guiHelper->createPhysicsDebugDrawer(m_dynamicsWorld);
|
||||||
|
|
||||||
{
|
{
|
||||||
@@ -223,7 +225,7 @@ void VolumetricDeformable::initPhysics()
|
|||||||
getDeformableDynamicsWorld()->addForce(psb, gravity_force);
|
getDeformableDynamicsWorld()->addForce(psb, gravity_force);
|
||||||
m_forces.push_back(gravity_force);
|
m_forces.push_back(gravity_force);
|
||||||
|
|
||||||
btDeformableNeoHookeanForce* neohookean = new btDeformableNeoHookeanForce(30,100,0.02);
|
btDeformableNeoHookeanForce* neohookean = new btDeformableNeoHookeanForce(30,100,0.05);
|
||||||
getDeformableDynamicsWorld()->addForce(psb, neohookean);
|
getDeformableDynamicsWorld()->addForce(psb, neohookean);
|
||||||
m_forces.push_back(neohookean);
|
m_forces.push_back(neohookean);
|
||||||
|
|
||||||
|
|||||||
@@ -188,7 +188,13 @@ struct MultiBodyInplaceSolverIslandCallback : public btSimulationIslandManager::
|
|||||||
//} else
|
//} else
|
||||||
{
|
{
|
||||||
for (i = 0; i < numBodies; i++)
|
for (i = 0; i < numBodies; i++)
|
||||||
m_bodies.push_back(bodies[i]);
|
{
|
||||||
|
bool isSoftBodyType = (bodies[i]->getInternalType() & btCollisionObject::CO_SOFT_BODY);
|
||||||
|
if (!isSoftBodyType)
|
||||||
|
{
|
||||||
|
m_bodies.push_back(bodies[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
for (i = 0; i < numManifolds; i++)
|
for (i = 0; i < numManifolds; i++)
|
||||||
m_manifolds.push_back(manifolds[i]);
|
m_manifolds.push_back(manifolds[i]);
|
||||||
for (i = 0; i < numCurConstraints; i++)
|
for (i = 0; i < numCurConstraints; i++)
|
||||||
|
|||||||
@@ -435,7 +435,7 @@ btScalar btDeformableFaceNodeContactConstraint::solveConstraint()
|
|||||||
m_total_tangent_dv -= impulse_tangent * m_contact->m_imf;
|
m_total_tangent_dv -= impulse_tangent * m_contact->m_imf;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_total_normal_dv.dot(m_contact->m_normal) < 0)
|
if (m_total_normal_dv.dot(m_contact->m_normal) > 0)
|
||||||
{
|
{
|
||||||
// separating in the normal direction
|
// separating in the normal direction
|
||||||
m_static = false;
|
m_static = false;
|
||||||
|
|||||||
@@ -119,6 +119,7 @@ void btSoftBody::initDefaults()
|
|||||||
m_dampingCoefficient = 1;
|
m_dampingCoefficient = 1;
|
||||||
m_sleepingThreshold = 0.1;
|
m_sleepingThreshold = 0.1;
|
||||||
m_useFaceContact = false;
|
m_useFaceContact = false;
|
||||||
|
m_useSelfCollision = false;
|
||||||
m_collisionFlags = 0;
|
m_collisionFlags = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user