Ponto V!

Home Matemática e Física Utilizando Motores de Física
Bruno Crivelari Sanches
Utilizando Motores de FísicaImprimir
Escrito por Bruno Crivelari Sanches
Índice do Artigo
Utilizando Motores de Física
Criando um Programa Exemplo
Integrando Bullet com Ogre3d
Configurando o Projeto e Download
Todas Páginas

No artigo anterior tivemos uma visão geral de como funciona a física nos jogos modernos e vimos alguns conceitos sobre o funcionamento e utilização de motores de física. Neste artigo iremos ver como integrar um desses motores e integrá-lo a um jogo 3d utilizando a Bullet Physics e o Ogre 3d.

Bullet Physics

Uma imagem da aplicação que iremos construirA biblioteca Bullet é uma biblioteca para detecção de colisões e simulação da dinâmica de corpos rígidos e corpos macios. Ela possui código aberto e pode ser usada em projetos comerciais ou não, contanto que o projeto se encaixe nos termos da licença ZLib, que inclusive torna possível o uso da biblioteca em consoles e outros dispositivos que não permitam ligação dinâmica.

Das bibliotecas físicas que conheço a Bullet é uma das mais completas e esta sempre em constante evolução. Escolhi ela devido a minha experiência com ela e por achar uma biblioteca fácil de se usar, apesar de a documentação a principio não ser muito amigável, ela possui uma interface intuitiva e consistente, o que simplifica o trabalho do programador.

A Bullet suporta as funcionalidades que geralmente qualquer biblioteca desse nível suporta e outras que não são tão comuns assim, sendo algumas funcionalidades:

  • Detecção de colisão discreta e continua, incluindo raios e formas convexas
  • Formas de colisão que incluem malhas côncavas e convexas, além de primitivas básicas
  • Simulação de corpos rígidos, dinâmica de veículos, controlador de personagens, juntas variadas e ragdolls
  • Corpos macios para simulação de tecidos, cordas e volumes que sofrem deformação, podendo interagir com corpos rígidos
  • Integração com o Blender, suporte a COLLADA

Instalando a Bullet

O primeiro passo para se utilizar a Bullet é fazer o download do pacote com o código fonte, para este artigo foi utilizada a versão 2.78, que pode ser encontrada na seção de downloads do projeto no Google Code clicando-se aqui. O arquivo utilizado foi o bullet-2.78.zip. Não espero mudanças nas versões futuras que venham a mudar a forma de instalação, caso isso ocorra vou atualizar o artigo com os novos passos.

Feito o download basta extrair os arquivos para o diretório de sua preferência, para o resto do artigo vou assumir que a biblioteca foi instalada no diretório “C:\develop\libs\bullet-2.78”, caso você use outro caminho, apenas modifique os passos a seguir conforme a necessidade.

A instalação não difere muito da instalação de qualquer outra biblioteca C/C++, a maior diferença é que é preciso compilar a Bullet antes do uso, pois ela não vem pré-compilada. Para este artigo foi utilizado o Visual Studio 2008 Express, que você pode aprender como instalar e utilizar com os artigos da seção sobre o Visual do PontoV, bastando clicar aqui. Caso utilize outro ambiente ou outra versão do Visual basta adaptar os passos conforme a necessidade.

Compilando a Bullet

Após extrair os arquivos você vai encontrar dentro da pasta de instalação a pasta “msvc”, que contém os projetos para serem utilizados com o Visual Studio. No meu caso acessei a pasta 2008 (que fica dentro de msvc) para abrir a solução “BULLET_PHYSICS.sln”.

Ao carregar a solução você vai se deparar com uma cena semelhante a da figura abaixo:

Visual após carregar o projeto da Bullet

Os projetos com o nome de “App*” são demonstrações de como utilizar a biblioteca e a principio precisamos de apenas os projetos que constroem a biblioteca, os projetos chamados “Bullet*” (e a LinearMath), selecione então estes projetos (BulletCollision, BulletDynamics, BulletFileLoader, BulletMultiTheaded, BulletSoftBody, BulletWorldImporter e LinearMath), clique no menu Build –> Build Selection, conforme mostra a figura abaixo:

Construindo a biblioteca Bullet

Assim que a compilação for concluída, modifique a configuração do projeto para “Release” (conforme mostrado na figura abaixo) e execute novamente a compilação, para assim construir a versão “Release” da biblioteca.

Untitled

Concluída compilação, observe que foram criadas duas pastas dentro da pasta 2008 da biblioteca, uma para a versão Debug e outra para versão Release:

Untitled

Agora que a biblioteca já foi construída, basta configurar o Visual Studio.

Configurando o Visual Studio

Para configurar o compilador, prefiro criar uma variável de ambiente que contenha o caminho para a biblioteca, dessa forma fica simples atualizar versões da biblioteca apenas modificando-se o valor da variável, este é o mesmo processo utilizado para se configurar o Ogre 3D neste artigo, onde você pode conferir detalhes de como criar variáveis de ambientes.

Uma variável de ambiente para a Bullet

Criada a variável basta abrir o Visual novamente, se você não fechou o Visual durante a criação da variável é preciso re-iniciar ele para que ele possa “enxergar” a nova variável de ambiente, caso não esteja utilizando uma variável, não é preciso fechá-lo.

Com o Visual aberto, clique em “Tools –> Options” e na janela que se abriu selecione “Projects and Solutions –> VC++ Directories”, na opção “Show Directories for:” selecione “Include Files”, de um duplo clique numa linha em branco e entre com o valor: $(BULLET_HOME)\src. O valor “$(BULLET_HOME)” indica a variável de ambiente recém criada, “\src” é a pasta dentro da pasta da Bullet onde podemos encontrar os arquivos de cabeçalho. Caso não tenha usado a variável de ambiente, entre apenas com o caminho de instalação da Bullet junto com a pasta src, como, por exemplo: C:\bullet-2.78\src.

Untitled

Por enquanto iremos configurar apenas os arquivos de cabeçalho, pois os arquivos de biblioteca iremos configurar diretamente no projeto. Faremos isso devido a um pequeno inconveniente da Bullet: os arquivos de “Debug” e “Release” possuem exatamente o mesmo nome. Como é preferível utilizar a versão correta de cada compilação de acordo com a compilação do nosso projeto, teremos que configurar quais arquivos utilizar diretamente no nosso projeto, então vamos partir para a construção do programa exemplo!



Comentários (15)
  • Luis Eduardo Nery Santos  - Visual Studio 2010
    avatar

    Olá, Bruno.

    Estou criando um jogo estilo Arkanoid, como projeto na faculdade.

    Gostaria de saber se essa biblioteca é indicada para utilizar em jogos 2d, feitos com c++ e OpenGL e também estou com duvidas na hora de configurar a variavel de ambiente no visual studio 2010, pois o VC++ não está habilitado.

    Parabéns pelos posts.

    Obrigado. =)

  • Vinícius Godoy de Mendonça
    avatar

    Para jogos 2D provavelmente será mais fácil utilizar a Box2D:
    http://box2d.org/

    O VC++ só será habilitado depois que você criar o primeiro arquivo .cpp dentro do seu projeto. Crie ele e o menu aparece. :)

  • Luis Eduardo Nery Santos  - Instalação da biblioteca
    avatar

    Valeu Vinicius! vou utilizar essa biblioteca para fazer meu jogo então.

    Mas eu não sei muito bem como instalar bibliotecas, tem algum tutorial pra me indicar?

    ou se for simples tem como dar uma explicada resumida?

    Obrigado. :lol:

  • Bruno Crivelari Sanches
    avatar

    Luis,

    no geral bibliotecas C/C++ seguem sempre um mesmo padrão:
    - extrair os arquivos para algum lugar
    - configurar diretório de includes do compilador
    - configurar diretório de libs do linker
    - nas configurações do seu projeto, adicionar as bibliotecas novas como dependencias

    Nesse artigo é feito tudo isso e ainda inclui o passo extra de compilar a bilbioteca. O processo pode variar uma biblioteca para outra, mas os passos básicos são os que listei aqui.

    Esse outro artigo mostra o processo para uma outra biblioteca (SDL) e explica em mais detalhes alguns conceitos, serve como uma "receita" para instalação de bibliotecas:
    http://pontov.com.br/site/cpp/46-conceitos-basicos/1 55-como-usar-bibliotecas-cc

  • augustowebd  - Versão para impressão
    avatar

    Bruno mais uma vez parabéns pelo excelente artigo, só gostaria de solicitar, não querendo ser abusado, uma versão para impressão completo, porque a versão para impressão atual pega apenas a página corrente.

    Grato.

  • Bruno Crivelari Sanches
    avatar

    Obrigado Augusto!

    Quando clico ali no "Todas as páginas" e depois na impressorinha, funciona com todas as páginas.

    T+

  • Napoleon  - Oiii
    avatar

    :cheer: Ei eu gostei muito de sua matéria, tem como falar do box2D :woohoo:

  • Bruno Crivelari Sanches
    avatar

    Oi Napoleon, vou por na lista aqui! :)

  • japaseki
    avatar

    Fala Sanches, estou tentando executar este projeto mas quando ele entra na tela para escolher o render (opengl ou DIRECTX), ele cai automaticamente....o q poderia ser ?

  • Bruno Crivelari Sanches
    avatar

    Olá,

    você seguiu a risca as instruções da ultima página no ultimo item "Configurando o Projeto" ?

    Se sim, tem que depurar para ver onde ocorre o erro e o porque.

    Para saber como usar o depurador: http://www.pontov.com.br/site/cpp/41-visual-c/216-como-usar-o-depurado r-do-visual-c

    T+

  • matheus bueno
    avatar

    ola,


    parabens pelo post, muito bom mesmo,

    fugindo um, pouco do assunto, eu estou criando um jogo( na verdadde é uma especie d PacMan modficado) em allegro, tem como usar a box 2D junto com o allegro, e se tiver, compensa usar?

    obriigado.

  • Bruno Crivelari Sanches
    avatar

    Para um pacman? Não vejo porque usar biblioteca de física. É um sistema de colisão tão simples.

  • Matheus Bueno
    avatar

    no caso haveriam modificações nele, seria meio temático, por exemplo em uma faze com o tema espaço sideral os fantasmas seriam et's que disparariam lazer's e por ai vai, o pacman também ganharia up grades de acordo com os pontos acumulados, esses up grades poderiam ser, por exemplo, mais tempo invencivel quando se come uma pirula, ou almento na velocidade,pensei q em algumas ocasioens aplicar uma biblioteca de física facilitaria meu trabalho.

    o problema maior no jogo esta sendo a AI, mas eu ta pensando em criar um grafo pra representar o labirinto, e calcular o menor caminho entre o fantasma e o pacman, só q eu to em duvida, se isso vai pesar meu jogo(se existe uma solução melhor ficaria grato em ouvir).

    quanto a biblioteca de fisica, gostaria de saber apenas se existe essa possibilidade, ate pra outros jogos com allegro, o pacman é meu primeiro jogo, é mais pra aprendizado, mas eu gostaria de fazer direitinho.

  • Bruno Crivelari Sanches
    avatar

    Pesar? Depende de onde você vai rodar, se for para um PC, um pacman dificilmente vai pesar.

    Sobre a física não vejo dificuldades em integrar com Allegro, geralmente as bibliotecas são independentes de API, como foi mostrado no artigo.

    T+

  • Aml  - Octree e outros
    avatar

    Bruno, antes de mais nada, Parabéns pelos artigos.
    Eu vou utilizar a engine, mas fiquei com uma dúvida:
    Bullet já trabalha com Octree ou é necessário implementar em caso de múltiplos elementos no cenário?


Escrever um comentário
Your Contact Details:
Gravatar enabled
Comentário:
[b] [i] [u] [url] [quote] [code] [img]   
:angry::0:confused::cheer:B):evil::silly::dry::lol::kiss::D:pinch::(:shock:
:X:side::):P:unsure::woohoo::huh::whistle:;):S:!::?::idea::arrow:
Security
Por favor coloque o código anti-spam que você lê na imagem.
LAST_UPDATED2  

Busca

Linguagens

Twitter