45 int N = bodies.
size();
52 for (
int i = 0; i <
N; ++i)
71 sum +=
rsb->m_nodes.size();
99 rsb->m_faceRigidContacts.resize(0);
100 rsb->m_faceNodeContacts.resize(0);
103 for (
int j = 0;
j <
rsb->m_nodes.size(); ++
j)
105 if (
rsb->m_nodes[
j].m_im > 0)
107 rsb->m_nodes[
j].m_effectiveMass_inv =
rsb->m_nodes[
j].m_effectiveMass.inverse();
112 rsb->predictIntegratedTransform(
solverdt,
rsb->getInterpolationWorldTransform());
122 rsb->mapToFullVelocity(
rsb->getInterpolationWorldTransform());
125 rsb->mapToFullPosition(
rsb->getInterpolationWorldTransform());
131 rsb->updateNodeTree(
true,
true);
132 if (!
rsb->m_fdbvt.empty())
134 rsb->updateFaceTree(
true,
true);
148 if (!
rsb->isReducedModesOFF())
151 rsb->applyReducedElasticForce(
rsb->m_reducedDofsBuffer);
152 rsb->applyReducedDampingForce(
rsb->m_reducedVelocityBuffer);
172 if (!
rsb->isReducedModesOFF())
175 rsb->updateReducedDofs(timeStep);
178 rsb->updateLocalMomentArm();
179 rsb->updateExternalForceProjectMatrix(
true);
183 rsb->mapToFullPosition(
rsb->getRigidTransform());
186 rsb->mapToFullVelocity(
rsb->getRigidTransform());
189 rsb->endOfTimeStepZeroing();
192 rsb->interpolateRenderMesh();
201 if (!
rsb->isActive())
207 for (
int j = 0;
j <
rsb->m_fixedNodes.size(); ++
j)
212 for (
int k = 0;
k < 3; ++
k)
224 for (
int j = 0;
j <
rsb->m_nodeRigidContacts.size(); ++
j)
234 rsb->m_contactNodesList.push_back(
contact.m_node->index -
rsb->m_nodeIndexOffset);
275 m_orderNonContactConstraintPool[
j] =
j;
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
const T & btMax(const T &a, const T &b)
float btScalar
The btScalar type abstracts floating point numbers, to easily switch between double and single floati...
static T sum(const btAlignedObjectArray< T > &items)
The btAlignedObjectArray template class uses a subset of the stl::vector interface for its methods It...
int size() const
return the number of elements in the array
void copyFromArray(const btAlignedObjectArray &otherArray)
void resize(int newsize, const T &fillData=T())
void clear()
clear the array, deallocated memory. Generally it is better to use array.resize(0),...
void push_back(const T &_Val)
btCollisionObject can be used to manage collision detection objects.
virtual void updateSoftBodies()
Perform necessary per-step updates of soft bodies such as recomputing normals and bounding boxes.
btDeformableBackwardEulerObjective * m_objective
btAlignedObjectArray< btSoftBody * > m_softBodies
virtual void applyExplicitForce()
virtual void predictMotion(btScalar solverdt)
Predict motion of soft bodies into next timestep.
btReducedDeformableBodySolver()
virtual btScalar solveContactConstraints(btCollisionObject **deformableBodies, int numDeformableBodies, const btContactSolverInfo &infoGlobal)
virtual void setConstraints(const btContactSolverInfo &infoGlobal)
virtual void setGravity(const btVector3 &gravity)
virtual void deformableBodyInternalWriteBack()
btAlignedObjectArray< btAlignedObjectArray< btReducedDeformableNodeRigidContactConstraint > > m_nodeRigidConstraints
virtual void reinitialize(const btAlignedObjectArray< btSoftBody * > &bodies, btScalar dt)
btAlignedObjectArray< btAlignedObjectArray< btReducedDeformableStaticConstraint > > m_staticConstraints
virtual void applyTransforms(btScalar timeStep)
void predictReduceDeformableMotion(btScalar solverdt)
void applyInternalVelocityChanges()
btAlignedObjectArray< int > m_fixedNodes
void applyRigidGravity(const btVector3 &gravity, btScalar dt)
void proceedToTransform(btScalar dt, bool end_of_time_step)
btAlignedObjectArray< int > m_contactNodesList
btAlignedObjectArray< DeformableNodeRigidContact > m_nodeRigidContacts
btVector3 can be used to represent 3D points and vectors.