Derzeit verwende ich Bullet SDK, um Physik-Sachen zu verarbeiten. Ich habe auch eine Debug-Schublade für die Physikvisualisierung implementiert.
Aber ich stecke fest, weil ich die Physik nicht korrekt mit der grafischen Darstellung des gehäuteten Modells synchronisieren kann. Tatsächlich sind sie nicht wie erwartet ausgerichtet: Das Netz liegt auf dem Boden, während die Kapselform nach unten versetzt ist.

Das ist mein Arbeitsablauf:
Nach der Initialisierung des gehäuteten Objekts verwende ich die AddCapsuleController()-Methode aus meinem Physikunterricht und übergebe sie unter anderem Andere Parameter, die Bone-Rootnode-Transformation:
Code: Select all
void Physics::AddCapsuleController(GameObject* actor, Animation* anim, btScalar radius, btScalar height, btScalar mass)
{
//Get animation (rootnode) transformation
glm::mat4 boneTransformation = anim->GetRootNode().transformation;
//retrieve single transformation components: position + rotation...
glm::vec3 scale{};
glm::quat rotation{};
glm::vec3 pos{};
glm::vec3 skew{};
glm::vec4 perspective{};
glm::decompose(boneTransformation, scale, rotation, pos, skew, perspective);
//Assign pos and rot to btTransform
btTransform transform;
transform.setIdentity();
transform.setOrigin(GlmToBulletVec3(pos));
btQuaternion Quat = GlmToBtQuaternion(rotation);
transform.setRotation(Quat);
btDefaultMotionState* motion = new btDefaultMotionState(transform);
btVector3 inertia;
btCollisionShape* capsule = new btCapsuleShape(radius, height);
capsule->calculateLocalInertia(mass, inertia);
btRigidBody* Charbody = new btRigidBody(mass, motion, capsule, inertia);
Charbody->setAngularFactor(btVector3(0, 0, 0));
Link(Charbody, actor);
}
Code: Select all
std::vector bone_transforms = animator.GetFinalBoneMatrices();
myPhyx->UpdateBoneTransform(&model_Entity, bone_transforms);
Mobile version