2012-11-21 3 views
4

Je sais que cela brise les lois de la physique, mais bien qu'il y ait souvent des raisons pratiques pour changer instantanément la position et l'orientation d'un corps dans un jeu, la plupart des bibliothèques de simulation physique Je ne le permets pas, donc Bullet Physics ne le fera pas non plus. Donc, j'apprécierais toute suggestion ou commentaire sur celui-ci. Par ailleurs, la téléportation vient à l'esprit qui nécessite ces changements instantanés. Une application plus exotique pourrait également être l'inertie - par exemple lors de l'inclinaison ou de la rotation d'un appareil portatif avec accéléromètre, de sorte que les objets sembleraient être statiques par rapport à l'utilisateur. La réalité augmentée ne devrait pas sembler ringarde.Modifier la position/orientation de btRigidBody à la volée dans Bullet Physics

Répondre

2

En supposant que je comprends votre question correctement, je vous recommande de vérifier BulletDynamics/Character/btCharacterControllerInterface.h et/ou BulletDynamics/Dynamics/btActionInterface.h. Souvent, on veut "plier les règles" lors de la mise en œuvre du mouvement de caractères - pour implémenter la téléportation, par exemple, on pourrait utiliser la méthode void warp(const btVector3& origin) de btCharacterControllerInterface.

Personnellement, j'ai eu la meilleure chance d'hériter directement de btActionInterface, en stockant un pointeur vers un btGhostObject que je peux mettre à jour et implémenter ma logique à partir de là, mais YMMV.

Note: Si vous êtes juste vouloir changer la position et l'orientation, vous devriez être en mesure d'appeler la méthode void setWorldTransform(const btTransform& worldTrans) pour btRigidBody.

+0

Est-ce que setWorldTransform change aussi la position du corps physique et la rotation, ou seulement la "peau" ou la représentation graphique? – rraallvv

+1

En fait, l'appel à setWorldTransform devrait seulement mettre à jour la partie physique - la mise à jour de la représentation graphique est à vous, bien que relativement simple à faire. (: –

Questions connexes