>_ DevTrendsnl

Taal

Home

Talen

Secties

Frontend Backend Mobiel DevOps AI / ML GameDev Blockchain Embedded Beveiliging
C

Erin Catto Brengt Legendarische Box2D-fysica naar 3D

Als je ooit geïnteresseerd bent geweest in 2D-game-ontwikkeling, ben je waarschijnlijk Box2D tegengekomen. Angry Birds, Limbo en honderden andere projecten zijn op deze engine gebouwd. Onlangs heeft de maker ervan, Erin Catto, zijn nieuwe project onthuld — Box3D. Het is een rigid body 3D-fysicabibliotheek van scratch geschreven in C.

Box3D Logo

Wat Box3D Is

De bibliotheek is geschreven in draagbare C17 en heeft geen externe afhankelijkheden buiten de standaard C-bibliotheek. De voorbeelden bij het project zijn geschreven in C++20 met de sokol graphics-backend en Dear ImGui-interface. De demo-applicatie bouwt zonder problemen op Windows, macOS en Linux, en laat je fysica direct in de browser uitvoeren via WebAssembly.

Box3D Video

In tegenstelling tot opgeblazen commerciële alternatieven richt Box3D zich op pure prestaties, een data-georiënteerde aanpak en voorspelbaarheid.

Belangrijkste Bibliotheekfuncties

Vectorberekeningen en Prestaties

De kern van de fysica-engine maakt actief gebruik van SSE2-vectorinstructies voor x86-processors en Neon voor ARM. Als je het project bouwt voor een exotisch platform of microcontroller zonder SIMD-ondersteuning, kan vectorwiskunde worden uitgeschakeld via de BOX3D_DISABLE_SIMD macro-definitie.

Soft Step Solver en Joint-typen

Het Soft Step-algoritme verwerkt rigid body-gedrag. De engine ondersteunt convexe hulls, capsules, bollen, polygonale meshes en height fields. Meerdere vormen kunnen aan één body worden bevestigd.

Beschikbare joints zijn onder andere:

  • Scharnieren en sliders
  • Afstandsbeperkingen en motoren
  • Lassen en wieljoints
  • Configureerbare limieten, veren en wrijving

Om resources te besparen wordt een island sleep-systeem gebruikt: als een groep objecten is gestopt, sluit de engine deze tijdelijk uit van berekeningen.

Determinisme en Simulatie Recording

Het resultaat van fysicawereldberekeningen blijft identiek op verschillende platforms. Dit is cruciaal voor netwerk multiplayer-games. Recording en replay van simulaties is standaard beschikbaar, wat het debuggen van fysica-bugs vereenvoudigt.

Continu Collision Detection

Snel bewegende objecten gaan niet door muren heen dankzij een volledig Continuous Collision Detection (CCD)-systeem. De algoritmen verwerken zowel snelle lineaire bewegingen als rotaties.

Hoe te Integreren in een Project

Box3D integreren in een CMake-project kost letterlijk een paar minuten 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)

Als je de voorkeur geeft aan lokale code van derden, werkt de standaard add_subdirectory ook:

add_subdirectory(extern/box3d)

target_link_libraries(my_app PRIVATE box3d::box3d)

Een Eerlijk Gesprek Over AI in Ontwikkeling

Een interessant detail in de README — de auteur beschrijft eerlijk de rol van neurale netwerken bij het maken van de bibliotheek. Erin Catto stelt expliciet dat hij LLMs gebruikt voor het genereren van unit tests, het configureren van CMake, het migreren van code van Box2D, het schrijven van benchmarks en codereview. Hij schrijft echter alle fysica-engine logica zelf en neemt persoonlijke verantwoordelijkheid voor elke regel code.

Voor Wie Dit Project Is

Als je je eigen 3D-engine in C of C++ schrijft en op zoek was naar een compacte fysicabibliotheek zonder enorme graphics- of engine-overhead, verdient Box3D een gedetailleerde blik. Het project is in release 0.1.0-fase, pull requests zijn momenteel gesloten en alleen issues worden geaccepteerd, maar de broncode is open onder de MIT-licentie en is zeer gemakkelijk te lezen.

Gerelateerde projecten