Come posso integrare la fisica dei proiettili nel mio gioco?


12

Ho scaricato il file di rilascio trovato qui , ma non sono sicuro da dove iniziare. Nel mio gioco ho un numero di oblunghi e una sfera, voglio che tutti questi si scontrino tra loro. (Hanno tutti mesh e volumi di delimitazione associati)

modifica - Ho appena realizzato che i cuboidi hanno effettivamente AABB associati a loro. Immagino che dovrò cambiarlo almeno.

Quali sono i passaggi che devo seguire?


2
hai dato un'occhiata al manuale nel capitolo 4.4 Integration overviewSo che è molto spartano ma descrive il processo di base. Quindi, se guardi quello e il codice per le Demo di esempio, non dovresti avere troppi problemi.
PeterT

Controlla anche gli esempi nella cartella bullet, ci sono un sacco di 'em
Maik Semder

@MaikSemder Non ero abbastanza sicuro di come aprirne di specifici. make files è solo linux?
SirYakalot,

in realtà le note su come aprire gli esempi sarebbero incredibilmente utili, quindi potrei solo vedere come hanno collegato le cose lì. Cercherò su Google per questo, ma ho pensato che avrei dovuto chiedere il più possibile.
SirYakalot,

Dipende da quale piattaforma sei. Per Visual Studio su Windows c'è un file .sln per gli esempi, presumo che sia quello che usi. Basta cercare il file sln nella cartella bullet.
Maik Semder,

Risposte:


21

Ecco i passaggi di base che dovrai seguire:

  1. Innanzitutto crea un oggetto mondiale (ad es. btDiscreteDynamicsWorld) Per guidare la tua simulazione fisica.

  2. Dovresti già avere una classe come quella GameObjectche forse memorizza un modello insieme al suo rettangolo di selezione e alla posizione / orientamento nel mondo. Sostituisci le informazioni sulla posizione / orientamento con un'istanza di un oggetto del corpo fisico (ad es. btRigidBody) E, nel rendering del modello, usa invece le informazioni fornite dal corpo. Quando crei il corpo, devi fornire la sua forma di massa e di collisione che dovrebbe corrispondere ai volumi limite che hai già. Ne ho parlato anche nell'altra tua domanda .

  3. Aggiungi ciascuno dei corpi dell'oggetto di gioco all'oggetto mondo .

  4. Aggiorna la simulazione facendo un passo nel mondo (es. Chiamando stepSimulationil tuo mondo).

E prenditi un po 'di tempo per leggere il manuale in quanto contiene anche molte informazioni.


Modifica per rispondere al commento

Mi arrabbio prima di chiedere ma ... come posso fare le cose molto basilari come includere semplicemente i file giusti nel mio gioco? Se hai bisogno di dettagli sto cercando i file che gestiranno le collisioni del corpo rigido. Inoltre, grazie mille per l'aiuto finora!

Bene, dal tuo commento sembrerebbe che non hai mai lavorato con librerie C ++ esterne prima. È passato un po 'di tempo da quando l'ho fatto, ma è così che ricordo il processo (in Visual Studio).

Per i principianti cito il manuale che spiega già di cosa hai bisogno:

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

Ed ecco i passaggi di base che dovrai seguire per soddisfare le condizioni sopra ...

1. Fase di preparazione

Prima di tutto, estrai il file scaricato in una directory nota, ad es C:\Bullet. Dovrai conoscere il percorso di questa cartella in seguito.

All'interno ci sono due cartelle che dovrai fare riferimento nel tuo progetto. La prima è la srccartella che contiene i .hfile di intestazione che includerai nel tuo codice sorgente. La seconda è la libcartella che conterrà i .libfile della libreria che collegherai al tuo progetto. Si noti che l'inclusione e il collegamento sono due cose diverse.

Ma la libcartella dovrebbe essere vuota per ora, perché non hai ancora creato il motore. Quindi fai riferimento al manuale su come costruire il progetto usando CMake e Visual Studio per esempio. È a pagina 7.

Dopo avere successo, si dovrebbe avere almeno tre file nella libcartella: BulletDynamics.lib, BulletCollision.libe LinearMath.lib(sto indovinando dal manuale). Ora per stabilire la connessione tra Bullet e il tuo progetto ...

2. Includi intestazioni

Prima di tutto, dovrai aggiungere la C:\Bullet\srccartella alle opzioni del percorso di inclusione del tuo progetto. Puoi farlo in Visual Studio facendo clic con il tasto destro del mouse sul tuo progetto, navigando Configuration Properties -> C/C++ -> General -> Additional Include Directoriese scrivendo il percorso della directory lì dentro.

Dopo averlo configurato, puoi semplicemente fare #include “btBulletDynamicsCommon.h”il tuo codice. Tale intestazione sembra fungere da hub per tutte le funzionalità richieste.

3. Link Libraries

Infine dovrai collegare le librerie sopra menzionate. Frist, sotto Configuration Properties -> Linker -> General -> Additional Library Directoriesaggiungere il percorso della libcartella o in altre parole, C:\Bullet\lib.

Quindi, sotto Configuration Properties -> Linker -> Input-> Additional Dependencies, aggiungi il nome delle librerie all'elenco delle dipendenze. Separare ogni libreria con a ;e non dimenticare l'estensione del file. Così, per esempio, si potrebbe aggiungere questo alla fine della lista: BulletDynamics.lib;BulletCollision.lib;LinearMath.lib.

Dopo questo dovresti essere in grado di costruire ed eseguire il tuo progetto.


Mi arrabbio prima di chiedere ma ... come posso fare le cose molto basilari come includere semplicemente i file giusti nel mio gioco? Se hai bisogno di dettagli sto cercando i file che gestiranno le collisioni del corpo rigido. Inoltre, grazie mille per l'aiuto finora!
SirYakalot,

@AsherEinhorn Controlla la mia modifica.
David Gouveia,

@AsherEinhorn Nessun problema, anche questo mi ha fatto inciampare la prima volta che ho lavorato con le librerie C ++ un paio di anni fa.
David Gouveia,

Sì, è una di quelle cose che ho evitato fino ad ora, tutto il codice nei miei giochi è mio, ma cercare di scrivere il mio motore fisico è solo una perdita di tempo quando altre persone li hanno fatti meglio di me probabilmente mai lo farà.
SirYakalot,

@AsherEinhorn Sì, non preoccuparti di scrivere il tuo motore fisico anche se il gioco sembra semplice. La prima volta che ho usato un motore fisico è stato dopo aver provato a implementarlo da solo su un semplice gioco 2D. Ho implementato il rilevamento delle collisioni OBB-OBB usando il teorema dell'asse di separazione, ma quando ho raggiunto il punto in cui avevo bisogno di una risposta alla collisione, ero completamente bloccato. Poi ho pensato che avrei potuto provare un motore fisico (in particolare ho usato Box2D) e in meno di un'ora avevo tutto funzionante.
David Gouveia,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.