>_ DevTrendspt

Idioma

Início

Linguagens

Seções

Frontend Backend Mobile DevOps AI / ML GameDev Blockchain Embarcados Segurança
C

Erin Catto Traz a Lendária Física do Box2D para 3D

Se você já se interessou por desenvolvimento de jogos 2D, provavelmente já ouviu falar do Box2D. Angry Birds, Limbo e centenas de outros projetos foram construídos com esse motor. Recentemente, seu criador, Erin Catto, revelou seu novo projeto — Box3D. É uma biblioteca de física 3D de corpos rígidos escrita do zero em C.

Box3D Logo

O Que é o Box3D

A biblioteca é escrita em C17 portátil e não possui dependências externas além da biblioteca C padrão. Os exemplos incluídos no projeto são escritos em C++20 com o backend gráfico sokol e interface Dear ImGui. A aplicação demo compila sem problemas no Windows, macOS e Linux, e permite executar física diretamente no navegador via WebAssembly.

Box3D Video

Ao contrário de alternativas comerciais inchadas, o Box3D foca em performance pura, uma abordagem orientada a dados e previsibilidade.

Principais Recursos da Biblioteca

Computação Vetorial e Performance

O núcleo do motor de física usa ativamente instruções vetoriais SSE2 para processadores x86 e Neon para ARM. Se você estiver compilando o projeto para uma plataforma exótica ou microcontrolador sem suporte SIMD, a matemática vetorial pode ser desabilitada através da definição da macro BOX3D_DISABLE_SIMD.

Soft Step Solver e Tipos de Junções

O algoritmo Soft Step gerencia o comportamento dos corpos rígidos. O motor suporta invólucros convexos, cápsulas, esferas, malhas poligonais e campos de altura. Múltiplas formas podem ser anexadas a um único corpo.

As junções disponíveis incluem:

  • Dobradiças e deslizadores
  • Restrições de distância e motores
  • Soldas e junções de roda
  • Limites configuráveis, molas e atrito

Para economizar recursos, um sistema de ilhas de sono é usado: se um grupo de objetos parou, o motor temporariamente o exclui dos cálculos.

Determinismo e Gravação de Simulação

O resultado dos cálculos do mundo físico permanece idêntico em diferentes plataformas. Isso é crítico para jogos multiplayer em rede. Gravação e reprodução de simulações está disponível nativamente, simplificando o debug de bugs de física.

Detecção Contínua de Colisão

Objetos em movimento rápido não atravessam paredes graças a um sistema completo de Detecção Contínua de Colisão (CCD). Os algoritmos lidam tanto com movimentos lineares rápidos quanto com rotações.

Como Integrar a um Projeto

Integrar o Box3D a um projeto CMake leva literalmente alguns minutos via FetchContent:

include(FetchContent)
FetchContent_Declare(box3d
  GIT_REPOSITORY https://github.com/erincatto/box3d.git
  GIT_TAG v0.1.0)
FetchContent_MakeAvailable(box3d)

target_link_libraries(my_app PRIVATE box3d::box3d)

Se você preferir manter código de terceiros local, o add_subdirectory padrão também funciona:

add_subdirectory(extern/box3d)

target_link_libraries(my_app PRIVATE box3d::box3d)

Uma Conversa Honesta Sobre IA no Desenvolvimento

Um detalhe interessante no README — o autor descreveu honestamente os papéis das redes neurais na criação da biblioteca. Erin Catto explicitamente afirma que usa LLMs para gerar testes unitários, configurar CMake, migrar código do Box2D, escrever benchmarks e revisão de código. Porém, ele escreve toda a lógica do motor de física他自己 e assume responsabilidade pessoal por cada linha de código.

Para Quem Este Projeto É

Se você está escrevendo seu próprio motor 3D em C ou C++ e estava procurando uma biblioteca de física compacta sem uma enorme sobrecarga gráfica ou de motor, o Box3D merece uma olhada detalhada. O projeto está no estágio de versão 0.1.0, pull requests estão atualmente fechados e apenas issues são aceitas, mas o código fonte é aberto sob licença MIT e é muito fácil de ler.

Projetos relacionados