Ich hab mal noch ein bisschen gesucht und etwas interessantes auf GameDev.net gefunden:
http://www.gamedev.net/community/forums/topic.asp?topic_id=550203
Da wird über das selbe Problem (SceneGraph + Physics) diskutiert. Am Ende kommt raus, dass beide Systeme nicht miteinander kombinierbar sind.
Was die Hierarchie angeht: Da gibt es in einer Physik-Engine Joints dafür. Also alles in eine Szene packen und mit Joints verbinden.
So könnte man beispielsweise die Autotür mit einem FixedJoint an da Auto kleben.
Wenn ich mir das so überlege, komm ich auch mit diesem Scene-System klar.
Und für das Animatio-System hab ich mir auch was einfallen lassen:
Jedes Objekt bekommt beim Erstellen einen "Animator". Davon gibt es 2 Stück: Der eine ist ein "expliziter", der andere ein "rekursiver".
Der Explizite Animator zählt die Zeit mit und holt dann die Zustandsdaten aus den IpoCurves.
Im Gegensatz dazu, arbeitet der Rekursive Animator mit Kräften, Beschleunigung, Geschwindigkeit, usw. Dazu hat er einen "Controler"- das kann der Input des Spielers sein oder KI. Dieser Controler sagt zum Beispiel: "Beschleunigung vorwärts", wenn der Gamer die [W]-Taste gedrückt hat. Die Auswirkung dieser Kräfte, etc. werden von der Physik-Engine berechnet. Das fertige Ergebnis - der "Zustand" - wird dann von der Physik-Engine abgeholt.
Wenn es zu Kollisionen kommen sollte:
Objekte mit expliziten Animatoren reagieren nicht auf Kollisionen. Sie haben praktisch eine unendliche Masse.
Wenn sie mit anderen expliziten Objekten kollidieren, dann passiert nicht. Sie fiegen einfach durch einander durch.
Rekursiv berechnete Objekte (die natürlich auch Physik-kontrolliert sind) würden bei Kollisionen untereinander und bei Kollisionen mit explizit animierten Objekten physikalisch richtig "reagieren".
Soweit mein Ansatz.
Habt ihr bessere? Habr ihr Tips bei der Implementation?
Zum Thema PhysX integrieren: Was haltet ihr für sinnvoller:
1.) PhysX komplett Wrappen und mit eigenen Klassen arbeiten
PRO: Eigene Doku möglich, PhysX wird "smart" gehalten.
CONTRA: Möglicherweise kein voller Umfang aller Funktionen verfügbar
2.) Jedes Object bekommt eine NxActor-Instanz und der User kann damit machen, was er will.
PRO: Alles (was PhysX bietet) ist möglich.
CONTRA: User muss auf einer Low-Level-Ebene arbeiten, nur die Original PhysX Doku ist verfügbar.
Ich tendiere eher zu 2.). Weil:
- Ich kann meine Math-Lib so anpassen, das sie mit PhysX sehr gut kombinierbar ist. Zum Beispiel Casting-Operatoren von meinen Quaternionen zu NxQuat und umgekeht von NxQuat per CTOR zu meinen Quaternionen.
- PhysX eine sehr gute Doku bietet, viele Samples und Training Programs
- PhysX ist meiner Meinung nach nicht so Low-Level wie das zum Beispiel bei Direct3D der Fall ist.
Was würdet ihr tun? Wie würdet ihr es tun?
Ich freue mich über jeden Ratschlag und jede Erfahrung!