Como integro a física de balas ao meu jogo?

12

Fiz o download do arquivo de versão encontrado aqui , mas não sei por onde começar. No meu jogo, tenho vários oblongos e uma esfera, quero que todos colidam uns com os outros. (Todos eles têm malhas e volumes delimitadores associados)

edit - Acabei de perceber que os cuboides realmente têm AABB's associados a eles. Acho que vou ter que mudar isso pelo menos.

Quais são os passos que preciso seguir?

SirYakalot
fonte
2
você deu uma olhada no manual do capítulo 4.4 Integration overviewEu sei que é muito espartano, mas descreve o processo básico. Portanto, se você olhar para isso e o código do exemplo Demos, não deverá ter muitos problemas.
PeterT
Verifique também os exemplos na pasta bullet, há um monte deles
Maik Semder
@MaikSemder Eu não tinha muita certeza de como abrir os específicos. são apenas arquivos make linux?
SirYakalot
realmente observar como abrir os exemplos seria incrivelmente útil, então eu pude ver como eles vincularam as coisas lá. Vou procurar no Google por isso, mas pensei em perguntar enquanto posso.
214128 SirYakalot
Isso depende de qual plataforma você é. Para o visual studio no windows, há um arquivo .sln para os exemplos, presumo que seja isso que você usa. Basta procurar o arquivo sln na pasta bullet.
Maik Semder

Respostas:

21

Aqui estão as etapas básicas que você precisará seguir:

  1. Primeiro, crie um objeto mundial (ou seja btDiscreteDynamicsWorld) para conduzir sua simulação de física.

  2. Você já deve ter uma classe como essa GameObjectque talvez armazene um modelo junto com sua caixa delimitadora e posição / orientação no mundo. Substitua as informações de posição / orientação por uma instância de um objeto de corpo físico (ou seja btRigidBody) e, ao renderizar o modelo, use as informações fornecidas pelo corpo. Ao criar o corpo, você precisará fornecer sua forma de massa e colisão, que deve corresponder aos volumes delimitadores que você já possui. Eu já falei sobre isso na sua outra pergunta também.

  3. Adicione cada um dos corpos do seu objeto de jogo ao objeto mundial .

  4. Atualize a simulação pisando no mundo (ou seja, chamando stepSimulationseu mundo).

E reserve um tempo para ler o manual, pois também possui muitas informações.


Editar para endereçar o comentário

Eu me encolho antes de perguntar, mas ... como faço as coisas muito básicas, como simplesmente incluir os arquivos certos no meu jogo? Se você precisar de detalhes, estou procurando os arquivos que irão lidar com colisões rígidas de corpos. Também muito obrigado pela ajuda até agora!

Bem, parece que em seu comentário você nunca trabalhou com bibliotecas C ++ externas antes. Já faz um tempo desde que fiz isso, mas é assim que me lembro do processo (no Visual Studio).

Para começar, cito o manual que já explica o que você precisa:

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

E aqui estão as etapas básicas que você deverá seguir para atender às condições acima ...

1. Etapa de preparação

Primeiro, extraia o arquivo que você baixou para um diretório conhecido, por exemplo C:\Bullet. Você precisará conhecer o caminho para esta pasta posteriormente.

Dentro, existem duas pastas que você precisará referenciar em seu projeto. A primeira é a srcpasta que contém os .harquivos de cabeçalho que você incluirá no seu código-fonte. A segunda é a libpasta que conterá os .libarquivos da biblioteca que você vinculará ao seu projeto. Observe que incluir e vincular são duas coisas diferentes.

Mas a libpasta deve estar vazia por enquanto, porque você ainda não criou o mecanismo. Portanto, consulte o manual sobre como criar o projeto usando o CMake e o Visual Studio, por exemplo. Está na página 7.

Depois de ter sucesso, você deve ter pelo menos três arquivos na libpasta: BulletDynamics.lib, BulletCollision.libe LinearMath.lib(eu estou supondo do manual). Agora, para fazer a conexão entre o Bullet e seu projeto ...

2. Incluir cabeçalhos

Primeiro de tudo, você precisará adicionar a C:\Bullet\srcpasta às opções de caminho de inclusão do seu projeto. Você pode fazer isso no Visual Studio clicando com o botão direito do mouse no seu projeto, navegando Configuration Properties -> C/C++ -> General -> Additional Include Directoriese gravando o caminho do diretório.

Depois de configurar isso, você pode simplesmente fazer #include “btBulletDynamicsCommon.h”no seu código. Esse cabeçalho parece servir como um hub para todos os recursos necessários.

3. Bibliotecas de Link

Finalmente, você precisará vincular as bibliotecas mencionadas acima. Primeiro, em Configuration Properties -> Linker -> General -> Additional Library Directoriesadicionar o caminho para a libpasta, ou em outras palavras C:\Bullet\lib,.

Em seguida, Configuration Properties -> Linker -> Input-> Additional Dependenciesadicione o nome das bibliotecas à lista de dependências. Separe cada biblioteca com um ;e não esqueça a extensão do arquivo. Assim, por exemplo, você pode adicionar isso para o final da lista: BulletDynamics.lib;BulletCollision.lib;LinearMath.lib.

Após isso, você poderá criar e executar seu projeto.

David Gouveia
fonte
Eu me encolho antes de perguntar, mas ... como faço as coisas muito básicas, como simplesmente incluir os arquivos certos no meu jogo? Se você precisar de detalhes, estou procurando os arquivos que irão lidar com colisões rígidas de corpos. Também muito obrigado pela ajuda até agora!
precisa saber é o seguinte
@AsherEinhorn Confira minha edição.
David Gouveia
@AsherEinhorn Sem problemas, isso também me tropeçou na primeira vez em que trabalhei com bibliotecas C ++ há alguns anos.
David Gouveia
Sim, é uma daquelas coisas que eu meio que evitei até agora, todo o código dos meus jogos é meu, mas tentar escrever meu próprio mecanismo de física é apenas uma perda de tempo quando outras pessoas o fizeram melhor do que eu provavelmente sempre será.
SirYakalot
@AsherEinhorn Sim, não se preocupe em escrever seu próprio mecanismo de física, mesmo que o jogo pareça simples. A primeira vez que usei um mecanismo de física foi depois de tentar implementá-lo em um jogo 2D simples. Eu implementei a detecção de colisão OBB-OBB usando o teorema do eixo de separação, mas quando cheguei ao ponto em que precisava de resposta à colisão, fiquei completamente paralisado. Então imaginei que poderia tentar um mecanismo de física (em particular eu usei o Box2D) e em menos de uma hora eu tinha tudo pronto para funcionar.
David Gouveia