Dieses Buch ist eine umfassende Anleitung zu den üblicherweise verwendeten linearen Algebra- und Kollisionserkennungsspielen, geht jedoch nur kurz auf das Thema Kollisionsauflösung (Physik) ein. Das Buch ist wie folgt aufgebaut:
Alle in diesem Buch behandelten Themen werden verwendet, um schrittweise eine Starrkörperphysik-Engine aufzubauen. In den letzten drei Kapiteln (14, 15 und 16) werden Teilchenphysik, Starrkörperphysik und Weichkörperphysik (Stoff) behandelt. Es wird ein Anhang bereitgestellt, der kurz auf fortgeschrittene Themen, Ressourcen zur Erforschung dieser Themen sowie zusätzliche Ressourcen zur Erforschung der Spielphysik eingeht.
Einige der für das Buch erstellten Abbildungen ließen sich nicht gut in den Druck übertragen. Um dies zu beheben, habe ich alle Buchfiguren in dieses Repository aufgenommen und die Figuren online veröffentlicht unter: https://github.com/gamephysicscookbook/Figures
Die ersten drei Kapitel des Buches sind der Vermittlung der grundlegenden linearen Algebra gewidmet, die für die Spieleentwicklung erforderlich ist. Jedes Konzept wird in einem mathematischen Kontext erklärt, für jedes Konzept wird Quellcode bereitgestellt und es werden auch Bilder bereitgestellt, wenn etwas visuell erkundet werden kann. In den ersten drei Kapiteln werden die folgenden Datenstrukturen erstellt:
vec2
)vec3
)mat2
)mat3
)mat4
)Wenn möglich, werden Matrixoperationen auf generische Weise implementiert. Beispielsweise wird Code bereitgestellt, um zwei Matrizen beliebiger Größe miteinander zu multiplizieren.
Die folgenden Schnittpunkte werden im Buch behandelt:
Punkt | Linie | Ray | Kugel | AABB | OBB | Flugzeug | Dreieck | Frustum | |
---|---|---|---|---|---|---|---|---|---|
Punkt | |||||||||
Linie | |||||||||
Ray | |||||||||
Kugel | |||||||||
AABB | |||||||||
OBB | |||||||||
Flugzeug | |||||||||
Dreieck | |||||||||
Frustum |
Kapitel 14 befasst sich mit der naiven Teilchenphysik. Dieses Kapitel ist als Einführung in die Einrichtung einer Physikschleife und die Betrachtung des allgemeinen Formats einer Physikschleife gedacht. Kapitel 15 ist das interessanteste Kapitel. Es implementiert eine grundlegende Starrkörperphysik-Engine. Die Basis-Engine unterstützt ausgerichtete Kästchen und Kugeln. Das Stapeln kann zum Laufen gebracht werden, wird aber nicht direkt unterstützt. Kapitel 16 befasst sich mit Federn und wie Federn zur Implementierung der Weichkörperphysik verwendet werden können. Die letzte Demo des Buches ist eine Demo zur Weichkörper- und Stoffphysik.
Da dies mein erstes Buch ist, habe ich viel über den Schreibprozess gelernt; Vielleicht geht es sogar noch mehr um die Planung. Das Folgende ist eine Liste von Dingen, die ich beim Schreiben dieses Buches entdeckt habe und die ich nicht richtig geplant hatte:
Quaternionen : Ein Quaternion ist ein Muss! Ich hatte vor, das Buch unter Verwendung von Euler-Rotationen und Rotationsmatrizen zu schreiben. Dies hat zwar funktioniert, aber der Zugang zu Quaternionen hätte das Leben viel einfacher gemacht.
Ebenen : Ebenenschnittpunkte sollten keinen booleschen Wert zurückgeben, sie sollten den Schnittpunkt wie folgt klassifizieren: dahinter, schneidend, vorne. Wenn sich die Kreuzung vorne oder hinten befindet, möchten Sie vorzugsweise einen Hinweis auf die Entfernung zurückgeben. Dies ist sehr nützlich, wenn man Frustum-Keulungen durchführt. Ich wusste nicht, wie ausführlich ich über Kegelstümpfe schreiben würde, also entschied ich mich für einfache boolesche Schnittmengen.
Raycasting : Ich hätte Raycasts schreiben sollen, um von Anfang an ein Raycast-Ergebnis zurückzugeben. Es stellte sich heraus, dass es schwieriger war, die Raycasting-API später in Textform auszudrücken, als ich erwartet hatte. Die Idee dahinter war, die Dinge zunächst einfach zu halten und sie nur bei Bedarf zu komplizieren.
Es gibt verschiedene Probleme bei der physikalischen Implementierung des Quellcodes. Diese Probleme ergeben sich aus der Tatsache, dass der physikalische Teil dieses Buches in drei Kapitel zusammengefasst werden musste. Es war einfach nicht genug Zeit, um alles abzudecken, was zur Herstellung eines robusten Starrkörperphysiksystems erforderlich ist. Das größte Problem mit der Engine ist die Tatsache, dass es keinen Arbiter gibt .
Ohne einen Schiedsrichter können wir keinen sequentiellen Impulslöser erstellen. Damit haben wir einen ziemlich einfachen, naiven Impulslöser. Das Problem besteht darin, dass Impulse pro Kontakt und pro Frame gelöst werden. Dies führt zu übermäßigem Gleiten. Den Mangel an sequentiellen Impulsen habe ich durch lineare Projektion und aggressive Friciton-Beeinflussung kompensiert. Ältere Physik-Engines machen etwas Ähnliches, indem sie sich auf starkes Schlafen verlassen, um das Problem zu verschleiern. Unnötig zu erwähnen, dass Schlafen nicht implementiert wurde.
Wenn ich Gelegenheit habe, eine zweite Auflage dieses Buches zu schreiben, werde ich die Kapitel über zweidimensionale Kollisionen (Kapitel 4, 5 und 6) entfernen und die Seitenzahl der Kapitel zum Szenenmanagement kürzen. Ich habe vor, die zusätzlichen Seiten zu nutzen, um die folgenden Themen abzudecken: