class
MotionStateBullet Physics motion state.
Encapsulates btMotionState
as a SceneGraph feature.
Usage
Common usage is to either create a btRigidBody
to share transformation with a SceneGraph::
btDynamicsWorld* btWorld = …; SceneGraph::Object<SceneGraph::MatrixTransformation3D> object; auto motionState = new BulletIntegration::MotionState{object}; auto collisionShape = new btBoxShape{{0.5f, 0.5f, 0.5f}}; auto rigidBody = new btRigidBody{20.0f, &motionState->btMotionState(), collisionShape}; btWorld->addRigidBody(rigidBody);
This way, the scene graph will be affected automatically by the Bullet simulation. It's also possible to attach the motion state afterwards:
rigidBody->setMotionState(&motionState->btMotionState());
Note that in the other direction, the transform is propagated from the scene graph to the rigid body only during the initial creation of the btRigidBody
or when you explicitly set the body as kinematic (which however makes it mostly a passive collision object):
rigidBody->setCollisionFlags(rigidBody->getCollisionFlags()| btCollisionObject::CF_KINEMATIC_OBJECT);
In order to update the transformation of a non-kinematic body, set the transform directly on the btRigidBody
:
rigidBody->setWorldTransform(btTransform(object.transformationMatrix()));
Keep in mind that changes to a rigid body using btRigidBody::setWorldTransform()
may only update the motion state of non-static objects and while btDynamicsWorld::stepSimulation()
is called.
Base classes
-
template<UnsignedInt dimensions, class T>class Magnum::SceneGraph::AbstractFeature<btScalar>
- Base for object features.
Constructors, destructors, conversion operators
-
template<class T>MotionState(T& object)
- Constructor.
Public functions
- auto btMotionState() -> btMotionState&
- Motion state.
Protected functions
- void getWorldTransform(btTransform& worldTrans) const override
- Get world transformation.
- void setWorldTransform(const btTransform& worldTrans) override
- Set world transformation.
Function documentation
template<class T>
Magnum:: BulletIntegration:: MotionState:: MotionState(T& object)
Constructor.
Parameters | |
---|---|
object | Object this motion state belongs to |
void Magnum:: BulletIntegration:: MotionState:: getWorldTransform(btTransform& worldTrans) const override protected
Get world transformation.
Updates worldTrans
with relative object rotation and translation.
void Magnum:: BulletIntegration:: MotionState:: setWorldTransform(const btTransform& worldTrans) override protected
Set world transformation.
Updates object translation and rotation with worldTrans
.