mirror of
https://github.com/bulletphysics/bullet3.git
synced 2026-09-13 22:08:21 +00:00
allow set gravity in deformable world. add transformTo for the reduced deformable object
This commit is contained in:
@@ -225,7 +225,7 @@ void ConservationTest::initPhysics()
|
||||
init_transform.setIdentity();
|
||||
init_transform.setOrigin(btVector3(0, 4, 0));
|
||||
// init_transform.setRotation(btQuaternion(btVector3(0, 1, 0), SIMD_PI / 2.0));
|
||||
rsb->transform(init_transform);
|
||||
rsb->transformTo(init_transform);
|
||||
|
||||
rsb->setStiffnessScale(100);
|
||||
rsb->setDamping(damping_alpha, damping_beta);
|
||||
|
||||
@@ -134,14 +134,14 @@ void FreeFall::initPhysics()
|
||||
|
||||
m_broadphase = new btDbvtBroadphase();
|
||||
btReducedSoftBodySolver* reducedSoftBodySolver = new btReducedSoftBodySolver();
|
||||
btVector3 gravity = btVector3(0, -10, 0);
|
||||
reducedSoftBodySolver->setGravity(gravity);
|
||||
|
||||
btDeformableMultiBodyConstraintSolver* sol = new btDeformableMultiBodyConstraintSolver();
|
||||
sol->setDeformableSolver(reducedSoftBodySolver);
|
||||
m_solver = sol;
|
||||
|
||||
m_dynamicsWorld = new btDeformableMultiBodyDynamicsWorld(m_dispatcher, m_broadphase, sol, m_collisionConfiguration, reducedSoftBodySolver);
|
||||
btVector3 gravity = btVector3(0, -10, 0);
|
||||
m_dynamicsWorld->setGravity(gravity);
|
||||
m_guiHelper->createPhysicsDebugDrawer(m_dynamicsWorld);
|
||||
// m_dynamicsWorld->getSolverInfo().m_solverMode |= SOLVER_RANDMIZE_ORDER;
|
||||
|
||||
@@ -157,7 +157,7 @@ void FreeFall::initPhysics()
|
||||
init_transform.setIdentity();
|
||||
init_transform.setOrigin(btVector3(0, 10, 0));
|
||||
// init_transform.setRotation(btQuaternion(btVector3(1, 0, 0), SIMD_PI / 6.0));
|
||||
rsb->transform(init_transform);
|
||||
rsb->transformTo(init_transform);
|
||||
|
||||
rsb->setStiffnessScale(100);
|
||||
rsb->setDamping(damping_alpha, damping_beta);
|
||||
|
||||
@@ -216,7 +216,7 @@ void ReducedCollide::initPhysics()
|
||||
init_transform.setIdentity();
|
||||
init_transform.setOrigin(btVector3(0, 4, 0));
|
||||
// init_transform.setRotation(btQuaternion(0, SIMD_PI / 2.0, SIMD_PI / 2.0));
|
||||
rsb->transform(init_transform);
|
||||
rsb->transformTo(init_transform);
|
||||
|
||||
rsb->setStiffnessScale(100);
|
||||
rsb->setDamping(damping_alpha, damping_beta);
|
||||
|
||||
@@ -397,6 +397,15 @@ void btReducedSoftBody::proceedToTransform(btScalar dt, bool end_of_time_step)
|
||||
m_invInertiaTensorWorld = m_interpolateInvInertiaTensorWorld;
|
||||
}
|
||||
|
||||
void btReducedSoftBody::transformTo(const btTransform& trs)
|
||||
{
|
||||
// get the current best rigid fit
|
||||
btTransform current_transform = getRigidTransform();
|
||||
// apply transform in material space
|
||||
btTransform new_transform = trs * current_transform.inverse();
|
||||
transform(new_transform);
|
||||
}
|
||||
|
||||
void btReducedSoftBody::transform(const btTransform& trs)
|
||||
{
|
||||
// translate mesh
|
||||
|
||||
@@ -127,15 +127,12 @@ class btReducedSoftBody : public btSoftBody
|
||||
//
|
||||
// various internal updates
|
||||
//
|
||||
virtual void transformTo(const btTransform& trs);
|
||||
virtual void transform(const btTransform& trs);
|
||||
// caution:
|
||||
// need to use scale before using transform, because the scale is performed in the local frame
|
||||
// (i.e., may have some rotation already, but the m_rigidTransformWorld doesn't have this info)
|
||||
virtual void scale(const btVector3& scl);
|
||||
virtual void transformTo(const btTransform& trs)
|
||||
{
|
||||
btAssert(false); // not supported yet
|
||||
}
|
||||
virtual void translate(const btVector3& trs)
|
||||
{
|
||||
btAssert(false); // use transform().
|
||||
|
||||
@@ -28,7 +28,7 @@ class btReducedSoftBodySolver : public btDeformableBodySolver
|
||||
btReducedSoftBodySolver();
|
||||
~btReducedSoftBodySolver() {}
|
||||
|
||||
void setGravity(const btVector3& gravity);
|
||||
virtual void setGravity(const btVector3& gravity);
|
||||
|
||||
virtual SolverTypes getSolverType() const
|
||||
{
|
||||
|
||||
@@ -69,6 +69,13 @@ public:
|
||||
// solve the momentum equation
|
||||
virtual void solveDeformableConstraints(btScalar solverdt);
|
||||
|
||||
// set gravity (get from deformable world)
|
||||
virtual void setGravity(const btVector3& gravity)
|
||||
{
|
||||
// for full deformable object, we don't store gravity in the solver
|
||||
// this function is overriden in the reduced deformable object
|
||||
}
|
||||
|
||||
// resize/clear data structures
|
||||
virtual void reinitialize(const btAlignedObjectArray<btSoftBody*>& softBodies, btScalar dt);
|
||||
|
||||
|
||||
@@ -442,6 +442,12 @@ void btDeformableMultiBodyDynamicsWorld::predictUnconstraintMotion(btScalar time
|
||||
m_deformableBodySolver->predictMotion(timeStep);
|
||||
}
|
||||
|
||||
void btDeformableMultiBodyDynamicsWorld::setGravity(const btVector3& gravity)
|
||||
{
|
||||
btDiscreteDynamicsWorld::setGravity(gravity);
|
||||
m_deformableBodySolver->setGravity(gravity);
|
||||
}
|
||||
|
||||
void btDeformableMultiBodyDynamicsWorld::reinitialize(btScalar timeStep)
|
||||
{
|
||||
m_internalTime += timeStep;
|
||||
|
||||
@@ -122,6 +122,8 @@ public:
|
||||
return m_sbi;
|
||||
}
|
||||
|
||||
virtual void setGravity(const btVector3& gravity);
|
||||
|
||||
void reinitialize(btScalar timeStep);
|
||||
|
||||
void applyRigidBodyGravity(btScalar timeStep);
|
||||
|
||||
@@ -1004,7 +1004,7 @@ public:
|
||||
/* Get best fit rigid transform */
|
||||
btTransform getRigidTransform();
|
||||
/* Transform to given pose */
|
||||
void transformTo(const btTransform& trs);
|
||||
virtual void transformTo(const btTransform& trs);
|
||||
/* Transform */
|
||||
virtual void transform(const btTransform& trs);
|
||||
/* Translate */
|
||||
|
||||
Reference in New Issue
Block a user