Erin Catto bringt legendäre Box2D-Physik in die 3D-Welt
Wenn Sie sich schon einmal für 2D-Spieleentwicklung interessiert haben, sind Sie wahrscheinlich auf Box2D gestoßen. Angry Birds, Limbo und Hunderte andere Projekte wurden mit dieser Engine erstellt. Kürzlich hat ihr Schöpfer, Erin Catto, sein neues Projekt vorgestellt — Box3D. Es ist eine Rigid-Body-3D-Physikbibliothek, die von Grund auf in C geschrieben wurde.
Was Box3D ist
Die Bibliothek ist in portabelm C17 geschrieben und hat keine externen Abhängigkeiten außer der Standard-C-Bibliothek. Die im Projekt enthaltenen Beispiele sind in C++20 mit dem sokol-Grafik-Backend und der Dear ImGui-Oberfläche geschrieben. Die Demo-Anwendung lässt sich problemlos unter Windows, macOS und Linux erstellen und ermöglicht es, Physik direkt im Browser über WebAssembly auszuführen.

Im Gegensatz zu aufgeblähten kommerziellen Alternativen konzentriert sich Box3D auf reine Leistung, einen datenorientierten Ansatz und Vorhersagbarkeit.
Wichtigste Funktionen der Bibliothek
Vektorberechnung und Leistung
Der Kern der Physik-Engine nutzt aktiv SSE2-Vektorinstruktionen für x86-Prozessoren und Neon für ARM. Wenn Sie das Projekt für eine exotische Plattform oder einen Mikrocontroller ohne SIMD-Unterstützung erstellen, kann die Vektormathematik über die Makrodefinition BOX3D_DISABLE_SIMD deaktiviert werden.
Soft-Step-Solver und Verbindungstypen
Der Soft-Step-Algorithmus verarbeitet das Rigid-Body-Verhalten. Die Engine unterstützt konvexe Hüllen, Kapseln, Kugeln, polygonale Netze und Höhenfelder. Mehrere Formen können an einen einzelnen Körper angehängt werden.
Verfügbare Verbindungen umfassen:
- Scharniere und Schieber
- Abstandsbeschränkungen und Motoren
- Schweißnähte und Radverbindungen
- Konfigurierbare Grenzen, Federn und Reibung
Um Ressourcen zu sparen, wird ein Island-Sleep-System verwendet: Wenn eine Gruppe von Objekten aufgehört hat sich zu bewegen, schließt die Engine sie vorübergehend von Berechnungen aus.
Determinismus und Simulationsaufzeichnung
Das Ergebnis der Physikwelt-Berechnungen bleibt auf verschiedenen Plattformen identisch. Dies ist entscheidend für vernetzte Multiplayer-Spiele. Die Aufzeichnung und Wiedergabe von Simulationen ist serienmäßig verfügbar, was das Debugging von Physikfehlern vereinfacht.
Kontinuierliche Kollisionserkennung
Schnell bewegte Objekte können nicht durch Wände hindurchgehen, dank eines vollständigen Continuous Collision Detection (CCD)-Systems. Die Algorithmen bewältigen sowohl schnelle lineare Bewegungen als auch Rotationen.
Wie man es in ein Projekt integriert
Die Integration von Box3D in ein CMake-Projekt dauert buchstäblich ein paar Minuten über 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)
Wenn Sie es vorziehen, Drittanbieter-Code lokal zu halten, funktioniert auch das Standard-add_subdirectory:
add_subdirectory(extern/box3d)
target_link_libraries(my_app PRIVATE box3d::box3d)
Ein ehrliches Gespräch über KI in der Entwicklung
Ein interessantes Detail in der README — der Autor hat ehrlich die Rolle neuronaler Netze bei der Erstellung der Bibliothek beschrieben. Erin Catto erklärt ausdrücklich, dass er LLMs verwendet, um Unit-Tests zu generieren, CMake zu konfigurieren, Code von Box2D zu migrieren, Benchmarks zu schreiben und Code-Reviews durchzuführen. Er schreibt jedoch die gesamte Physik-Engine-Logik selbst und übernimmt die persönliche Verantwortung für jede Codezeile.
Für wen dieses Projekt gedacht ist
Wenn Sie Ihre eigene 3D-Engine in C oder C++ schreiben und nach einer kompakten Physikbibliothek ohne massiven Grafik- oder Engine-Overhead gesucht haben, verdient Box3D einen detaillierten Blick. Das Projekt befindet sich im Stadium der Version 0.1.0, Pull-Requests sind derzeit geschlossen und nur Issues werden akzeptiert, aber der Quellcode ist unter der MIT-Lizenz offen und sehr leicht zu lesen.
Ähnliche Projekte