>_ DevTrendsit

Lingua

Home

Linguaggi

Sezioni

Frontend Backend Mobile DevOps AI / ML GameDev Blockchain Embedded Sicurezza
C

Erin Catto porta la leggendaria fisica Box2D in 3D

Se ti sei mai interessato allo sviluppo di giochi 2D, probabilmente ti sei imbattuto in Box2D. Angry Birds, Limbo e centinaia di altri progetti sono stati costruiti su questo motore. Recentemente, il suo creatore, Erin Catto, ha svelato il suo nuovo progetto — Box3D. È una libreria di fisica 3D a corpi rigidi scritta da zero in C.

Box3D Logo

Cos'è Box3D

La libreria è scritta in C17 portabile e non ha dipendenze esterne oltre alla libreria standard C. Gli esempi inclusi nel progetto sono scritti in C++20 con il backend grafico sokol e l'interfaccia Dear ImGui. L'applicazione demo viene compilata senza problemi su Windows, macOS e Linux e permette di eseguire la fisica direttamente nel browser tramite WebAssembly.

Box3D Video

A differenza delle alternative commerciali gonfiate, Box3D si concentra sulle pure prestazioni, un approccio orientato ai dati e sulla prevedibilità.

Funzionalità Principali della Libreria

Calcolo Vettoriale e Prestazioni

Il core del motore di fisica utilizza attivamente le istruzioni vettoriali SSE2 per processori x86 e Neon per ARM. Se stai compilando il progetto per una piattaforma esotica o un microcontrollore senza supporto SIMD, la matematica vettoriale può essere disabilitata tramite la definizione della macro BOX3D_DISABLE_SIMD.

Soft Step Solver e Tipi di Giunti

L'algoritmo Soft Step gestisce il comportamento dei corpi rigidi. Il motore supporta hull convessi, capsule, sfere, mesh poligonali e height field. È possibile allegare più forme a un singolo corpo.

I giunti disponibili includono:

  • Cerniere e slider
  • Vincoli di distanza e motori
  • Saldate e giunti ruota
  • Limiti configurabili, molle e attrito

Per risparmiare risorse, viene utilizzato un sistema di sleep a isole: se un gruppo di oggetti si è fermato, il motore lo esclude temporaneamente dai calcoli.

Determinismo e Registrazione della Simulazione

Il risultato dei calcoli del mondo fisico rimane identico su piattaforme diverse. Questo è fondamentale per i giochi multiplayer online. La registrazione e la riproduzione delle simulazioni è disponibile out of the box, semplificando il debugging dei bug della fisica.

Rilevamento Continuo delle Collisioni

Gli oggetti in rapido movimento non attraversano le pareti grazie a un sistema completo di rilevamento continuo delle collisioni (CCD). Gli algoritmi gestiscono sia i movimenti lineari veloci che le rotazioni.

Come Integrare in un Progetto

Integrare Box3D in un progetto CMake richiede letteralmente un paio di minuti tramite 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 preferisci mantenere il codice di terze parti locale, funzionerà anche il classico add_subdirectory:

add_subdirectory(extern/box3d)

target_link_libraries(my_app PRIVATE box3d::box3d)

Una Conversazione Onesta sull'IA nello Sviluppo

Un dettaglio interessante nel README — l'autore ha descritto onestamente i ruoli delle reti neurali nella creazione della libreria. Erin Catto dichiara esplicitamente che utilizza LLM per generare unit test, configurare CMake, migrare codice da Box2D, scrivere benchmark e revisionare il codice. Tuttavia, scrive personalmente tutta la logica del motore di fisica e si assume la responsabilità personale per ogni riga di codice.

A Chi È Destinato Questo Progetto

Se stai scrivendo il tuo motore 3D in C o C++ e cercavi una libreria di fisica compatta senza un enorme overhead grafico o di motore, Box3D merita un esame dettagliato. Il progetto è nella fase 0.1.0, le pull request sono attualmente chiuse e vengono accettate solo le issue, ma il codice sorgente è aperto sotto licenza MIT ed è molto facile da leggere.

Progetti correlati