diff --git a/examples/ReducedDeformableDemo/BasicTest.cpp b/examples/ReducedDeformableDemo/BasicTest.cpp index a26a758c9..624a93a35 100644 --- a/examples/ReducedDeformableDemo/BasicTest.cpp +++ b/examples/ReducedDeformableDemo/BasicTest.cpp @@ -156,7 +156,7 @@ void BasicTest::initPhysics() getDeformableDynamicsWorld()->addSoftBody(rsb); rsb->getCollisionShape()->setMargin(0.1); // rsb->scale(btVector3(1, 1, 1)); - rsb->translate(btVector3(0, 2, 0)); //TODO: add back translate and scale + // rsb->translate(btVector3(0, 2, 0)); //TODO: add back translate and scale // rsb->setTotalMass(0.5); rsb->setStiffnessScale(1); rsb->m_cfg.kKHR = 1; // collision hardness with kinematic objects diff --git a/examples/ReducedDeformableDemo/ModeVisualizer.cpp b/examples/ReducedDeformableDemo/ModeVisualizer.cpp index c11502511..a24da5884 100644 --- a/examples/ReducedDeformableDemo/ModeVisualizer.cpp +++ b/examples/ReducedDeformableDemo/ModeVisualizer.cpp @@ -77,7 +77,7 @@ public: sim_time += deltaTime; int n_mode = floor(visualize_mode); - btScalar scale = sin(rsb->m_eigenvalues[n_mode] * sim_time / frequency_scale); + btScalar scale = sin(sqrt(rsb->m_eigenvalues[n_mode]) * sim_time / frequency_scale); getDeformedShape(rsb, n_mode, scale); } @@ -136,7 +136,7 @@ void ModeVisualizer::initPhysics() { SliderParams slider("Visualize Mode", &visualize_mode); slider.m_minVal = 0; - slider.m_maxVal = num_modes; + slider.m_maxVal = num_modes - 1; if (m_guiHelper->getParameterInterface()) m_guiHelper->getParameterInterface()->registerSliderFloatParameter(slider); } diff --git a/src/BulletSoftBody/BulletReducedSoftBody/btReducedSoftBody.cpp b/src/BulletSoftBody/BulletReducedSoftBody/btReducedSoftBody.cpp index bf564b024..281544d70 100644 --- a/src/BulletSoftBody/BulletReducedSoftBody/btReducedSoftBody.cpp +++ b/src/BulletSoftBody/BulletReducedSoftBody/btReducedSoftBody.cpp @@ -41,9 +41,9 @@ void btReducedSoftBody::setMassProps(const tDenseArray& mass_array) btScalar total_mass = 0; for (int i = 0; i < m_nFull; ++i) { - m_nodalMass[i] = mass_array[3 * i]; - m_nodes[i].m_im = mass_array[3 * i] > 0 ? mass_array[3 * i] : 0; - total_mass += mass_array[3 * i]; + m_nodalMass[i] = m_rhoScale * mass_array[3 * i]; + m_nodes[i].m_im = mass_array[3 * i] > 0 ? 1.0 / (m_rhoScale * mass_array[3 * i]) : 0; + total_mass += m_rhoScale * mass_array[3 * i]; } // total rigid body mass m_mass = total_mass; @@ -78,6 +78,11 @@ void btReducedSoftBody::setStiffnessScale(const btScalar ks) m_ksScale = ks; } +void btReducedSoftBody::setMassScale(const btScalar rho) +{ + m_rhoScale = rho; +} + void btReducedSoftBody::predictIntegratedTransform(btScalar timeStep, btTransform& predictedTransform) { btTransformUtil::integrateTransform(m_worldTransform, m_linearVelocity, m_angularVelocity, timeStep, predictedTransform); @@ -155,7 +160,8 @@ void btReducedSoftBody::translate(const btVector3& trs) // std::cout << m_nodes[i].m_x[k] << "\t" << m_x0[i][k] << "\n"; // update rigid frame - // m_worldTransform.setOrigin(trs); + m_worldTransform.setOrigin(trs); + updateInertiaTensor(); } void btReducedSoftBody::updateRestNodalPositions() diff --git a/src/BulletSoftBody/BulletReducedSoftBody/btReducedSoftBody.h b/src/BulletSoftBody/BulletReducedSoftBody/btReducedSoftBody.h index 60883c255..729e05397 100644 --- a/src/BulletSoftBody/BulletReducedSoftBody/btReducedSoftBody.h +++ b/src/BulletSoftBody/BulletReducedSoftBody/btReducedSoftBody.h @@ -74,6 +74,8 @@ class btReducedSoftBody : public btSoftBody void setStiffnessScale(const btScalar ks); + void setMassScale(const btScalar rho); + virtual void translate(const btVector3& trs); void updateRestNodalPositions(); diff --git a/src/BulletSoftBody/BulletReducedSoftBody/btReducedSoftBodySolver.cpp b/src/BulletSoftBody/BulletReducedSoftBody/btReducedSoftBodySolver.cpp index edc96219d..ab4daa441 100644 --- a/src/BulletSoftBody/BulletReducedSoftBody/btReducedSoftBodySolver.cpp +++ b/src/BulletSoftBody/BulletReducedSoftBody/btReducedSoftBodySolver.cpp @@ -5,6 +5,7 @@ btReducedSoftBodySolver::btReducedSoftBodySolver() { m_dampingAlpha = 0; m_dampingBeta = 0; + m_gravity = btVector3(0, 0, 0); } void btReducedSoftBodySolver::setDamping(btScalar alpha, btScalar beta)