Bullet 学习笔记之 btDefaultSoftBodySolver
btSoftBodySolver
是 Bullet 物理引擎中关于软体形变仿真的又一个关键类。btSoftBodySolver
提供了关于软体形变仿真求解的一些接口。目前,在 Bullet 物理引擎中,派生出的只有 btDefaultSoftBodySolver
类。
下面来看一下,btDefaultSoftBodySolver
里面都有什么,实现了什么样的功能。
1、btDefaultSoftBodySolver
类的总体情况
在 btDefaultSoftBodySolver
类中,其成员变量也十分简单,仅仅是在 btDefaultSoftBodySolver.m_softBodySet
中存储了所涉及到的软体对象。
成员函数也很简单,有如下:
virtual bool checkInitialized();
virtual void updateSoftBodies();
virtual void optimize(btAlignedObjectArray<btSoftBody *> &softBodies, bool forceUpdate = false);
virtual void copyBackToSoftBodies(bool bMove = true);
virtual void solveConstraints(btScalar solverdt);
virtual void predictMotion(btScalar solverdt);
virtual void copySoftBodyToVertexBuffer(const btSoftBody *const softBody, btVertexBufferDescriptor *vertexBuffer);
virtual void processCollision(btSoftBody *, const btCollisionObjectWrapper *);
virtual void processCollision(btSoftBody *, btSoftBody *);
主要涉及软体的状体更新、约束求解、碰撞检测等。
2、主要成员函数
包括了 xxx。
2.1、场景优化函数 btDefaultSoftBodySolver::optimize(..)
哈,就一句话
m_softBodySet.copyFromArray(softBodies);
把涉及到的软体,拷贝(指针)到 m_softBodySet
中。
2.2、位移计算函数 btDefaultSoftBodySolver::predictMotion(t)
也是一句话,遍历 m_softBodySet
中的所有软体对象,执行 psb->predictMotion(timeStep);
。
2.3、更新软体位置 btDefaultSoftBodySolver::updateSoftBodies
同样是交由 btSoftBody
类来完成。即,遍历 m_softBodySet
中的所有软体对象,执行 psb->integrateMotion();
。
2.4、约束求解 btDefaultSoftBodySolver::solveConstraints
交由 btSoftBody
类来完成。即,遍历 m_softBodySet
中的所有软体对象,执行 psb->solveConstraints();
。
2.5、碰撞处理 btDefaultSoftBodySolver::processCollision
这部分工作是交由 softBody->defaultCollisionHandler(otherSoftBody);
以及 softBody->defaultCollisionHandler(collisionObjectWrap);
来完成的。
3、总结
总体上来说,btSoftBodySolver
也没做啥事。