Comment intégrer la physique des balles dans mon jeu?

12

J'ai téléchargé le fichier de version trouvé ici , mais je ne sais pas par où commencer. Dans mon jeu, j'ai un certain nombre d'oblongs et une sphère, je veux que tous ceux-ci entrent en collision les uns avec les autres. (Ils ont tous des maillages et des volumes englobants associés)

modifier - Je viens de réaliser que les cuboïdes sont associés à des AABB. Je suppose que je vais devoir changer cela au moins.

Quelles sont les étapes à suivre?

SirYakalot
la source
2
avez-vous jeté un œil au manuel au chapitre 4.4 Integration overviewJe sais que c'est très spartiate mais il décrit le processus de base. Donc, si vous regardez cela et le code de l'exemple de démonstration, vous ne devriez pas avoir trop de problèmes.
PeterT
Consultez également les exemples dans le dossier à
puces
@MaikSemder Je ne savais pas trop comment en ouvrir des spécifiques. sont des fichiers Linux uniquement?
SirYakalot
en fait, des notes sur la façon d'ouvrir les exemples seraient incroyablement utiles, alors je pourrais simplement voir comment ils ont lié les choses ensemble. Je vais chercher sur Google pour cela, mais j'ai pensé que je devrais demander pendant que je le peux.
SirYakalot
Cela dépend de la plateforme que vous êtes. Pour Visual Studio sur Windows, il existe un fichier .sln pour les exemples, je suppose que c'est ce que vous utilisez. Recherchez simplement le fichier sln dans le dossier à puces.
Maik Semder

Réponses:

21

Voici les étapes de base que vous devrez suivre:

  1. Créez d' abord un objet mondial (c'est btDiscreteDynamicsWorld-à- dire ) pour piloter votre simulation physique.

  2. Vous devriez déjà avoir une classe telle que GameObjectcelle qui stocke peut-être un modèle avec sa boîte englobante et sa position / orientation dans le monde. Remplacer la position / orientation d' informations avec une instance d'un physique corps objet ( par exemple btRigidBody) et lors du rendu du modèle, utiliser les informations fournies par l'organisme à la place. Lors de la création du corps, vous devrez fournir sa masse et sa forme de collision qui devraient correspondre aux volumes limites que vous avez déjà. J'en ai également parlé dans votre autre question .

  3. Ajoutez chacun des corps de votre objet de jeu à l' objet monde .

  4. Mettez à jour la simulation en parcourant le monde (c'est-à-dire en faisant appel stepSimulationà votre monde).

Et prenez le temps de lire le manuel car il contient aussi beaucoup d'informations.


Modifier pour répondre au commentaire

Je grince des dents avant de demander, mais ... comment faire les trucs très basiques comme simplement inclure les bons fichiers dans mon jeu? Si vous avez besoin de détails, je recherche les fichiers qui traiteront des collisions de corps rigides. Merci également pour l'aide jusqu'à présent!

Eh bien, il semblerait d'après votre commentaire que vous n'avez jamais travaillé avec des bibliothèques C ++ externes auparavant. Cela fait un moment que je n'ai pas fait ça, mais c'est ainsi que je me souviens du processus (dans Visual Studio).

Pour commencer, je cite le manuel qui explique déjà ce dont vous avez besoin:

- #include btBulletDynamicsCommon.h in your source file 
- Required include path: Bullet/src folder 
- Required libraries: BulletDynamics, BulletCollision, LinearMath

Et voici les étapes de base que vous devrez suivre pour remplir les conditions ci-dessus ...

1. Étape de préparation

Tout d'abord, extrayez le fichier que vous avez téléchargé dans un répertoire connu, par exemple C:\Bullet. Vous devrez connaître le chemin d'accès à ce dossier ultérieurement.

À l'intérieur, il y a deux dossiers que vous devrez référencer dans votre projet. Le premier est le srcdossier qui contient les .hfichiers d'en-tête que vous allez inclure dans votre code source. Le second est le libdossier qui contiendra les .libfichiers de bibliothèque que vous lierez à votre projet. Notez que l'inclusion et la liaison sont deux choses différentes.

Mais le libdossier doit être vide pour l'instant, car vous n'avez pas encore construit le moteur. Référez-vous donc au manuel sur la façon de construire le projet en utilisant CMake et Visual Studio par exemple. C'est à la page 7.

Une fois que vous réussissez, vous devez avoir au moins trois fichiers dans le libdossier: BulletDynamics.lib, BulletCollision.libet LinearMath.lib(je devine du manuel). Maintenant, pour faire le lien entre Bullet et votre projet ...

2. Inclure les en-têtes

Tout d'abord, vous devrez ajouter le C:\Bullet\srcdossier aux options de chemin d'inclusion de votre projet. Vous pouvez le faire dans Visual Studio en cliquant avec le bouton droit sur votre projet, en naviguant Configuration Properties -> C/C++ -> General -> Additional Include Directorieset en écrivant le chemin du répertoire là-dedans.

Après avoir configuré cela, vous pouvez simplement faire #include “btBulletDynamicsCommon.h”votre code. Cet en-tête semble servir de plaque tournante à toutes les fonctionnalités dont vous avez besoin.

3. Lier les bibliothèques

Enfin, vous devrez lier les bibliothèques mentionnées ci-dessus. Frist, sous Configuration Properties -> Linker -> General -> Additional Library Directoriesajouter le chemin d'accès au libdossier, ou en d' autres termes, C:\Bullet\lib.

Ensuite, sous Configuration Properties -> Linker -> Input-> Additional Dependencies, ajoutez le nom des bibliothèques à la liste des dépendances. Séparez chaque bibliothèque par un ;et n'oubliez pas l'extension du fichier. Ainsi , par exemple, vous pouvez ajouter cela à la fin de la liste: BulletDynamics.lib;BulletCollision.lib;LinearMath.lib.

Après cela, vous devriez pouvoir créer et exécuter votre projet.

David Gouveia
la source
Je grince des dents avant de demander, mais ... comment faire les trucs très basiques comme simplement inclure les bons fichiers dans mon jeu? Si vous avez besoin de détails, je recherche les fichiers qui traiteront des collisions de corps rigides. Merci également pour l'aide jusqu'à présent!
SirYakalot
@AsherEinhorn Vérifiez ma modification.
David Gouveia
@AsherEinhorn Pas de problème, cela m'a aussi trébuché la première fois que j'ai travaillé avec les bibliothèques C ++ il y a quelques années.
David Gouveia
Oui, c'est une de ces choses que j'ai évitées jusqu'à présent, tout le code de mes jeux est à moi, mais essayer d'écrire mon propre moteur physique n'est qu'une perte de temps lorsque d'autres personnes les ont mieux fait que moi le sera probablement jamais.
SirYakalot
@AsherEinhorn Oui, ne vous embêtez pas à écrire votre propre moteur physique même si le jeu semble simple. La première fois que j'ai utilisé un moteur physique, c'est après avoir essayé de l'implémenter moi-même sur un simple jeu 2D. J'ai implémenté la détection de collision OBB-OBB en utilisant le théorème de l'axe de séparation, mais quand j'ai atteint le point où j'avais besoin d'une réponse de collision, j'étais complètement coincé. Ensuite, j'ai pensé que je pourrais aussi bien essayer un moteur physique (en particulier j'ai utilisé Box2D) et en moins d'une heure, tout était opérationnel.
David Gouveia