Ich benutze die Bullet Physics Engine über Panda3d.
Meine Szene ist immer noch sehr einfach, denken Sie an 'Wolfenstein3d': Fliesenbasierte Wände sind feste Würfel.
Ich erwarte, dass Wände den Spieler blockieren, und ich erwarte, dass der Spieler bei nicht normalem Auftreten an den Wänden entlang rutscht.
Was ich bekomme, ist das, was ich erwarte, mit einem Unterschied: Es gibt etwas Jitter. Wenn ich versuche, mich in die Wand zu zwingen, sehe ich, dass die Rahmen zwischen zwei Positionen schnell blinken. Diese unterscheiden sich um ca. 0,04 Entfernungseinheiten, was in meinem Spiel 4 cm entspricht.
Ich habe an anderer Stelle 4 cm bemerkt: Der Boden meiner Spielerkapsel befindet sich im Ruhezustand 4 cm unter der Erde.
Bedeutet das, dass irgendwo in der Bullet-Engine eine Standardtoleranz von 0,04 Einheiten vorhanden ist, um Kontakt von Kollision zu unterscheiden? Wenn ja, was soll ich tun? Sollte ich den Maßstab meines Spiels so ändern, dass diese 0,04 Einheiten 0,4 cm entsprechen, wodurch der Jitter zehnmal kleiner wird? Oder kann ich die Kugel bitten, ihre Toleranz auf einen kleineren Wert zu ändern?
Bearbeiten
Dies ist der Jitter, den ich bekomme: 6.155 - 6.118 = 0.036
LPoint3f(0, 6.11694, 0.835)
LPoint3f(0, 6.15499, 0.835)
LPoint3f(0, 6.11802, 0.835)
LPoint3f(0, 6.15545, 0.835)
LPoint3f(0, 6.11817, 0.835)
LPoint3f(0, 6.15726, 0.835)
LPoint3f(0, 6.11876, 0.835)
LPoint3f(0, 6.15911, 0.835)
LPoint3f(0, 6.11937, 0.835)
Ich habe eine setMargin-Methode gefunden. Ich habe es sowohl auf der BoxShape für die Wände als auch auf der Kapselform für den Player auf 5 mm eingestellt. Es zittert immer noch um ca. 35 mm, wie in diesem Protokoll dargestellt (11.117 - 11.082 = 0.035):
LPoint3f(0, 11.0821, 0.905)
LPoint3f(0, 11.1169, 0.905)
LPoint3f(0, 11.082, 0.905)
LPoint3f(0, 11.117, 0.905)
LPoint3f(0, 11.082, 0.905)
LPoint3f(0, 11.117, 0.905)
LPoint3f(0, 11.0821, 0.905)
LPoint3f(0, 11.1175, 0.905)
LPoint3f(0, 11.0822, 0.905)
LPoint3f(0, 11.1178, 0.905)
LPoint3f(0, 11.0823, 0.905)
LPoint3f(0, 11.1183, 0.905)
Der Rand auf der Kapsel hat meine Penetration mit dem Boden verändert, ich bin etwas höher (0,905 statt 0,835). Bei der Kollision mit den Wänden änderte sich jedoch nichts.
Wie kann ich die Kollisionen gegen die Wände weniger nervös machen?
Bearbeiten, am Tag danach:
Nach weiteren Untersuchungen scheint sich das dynamische Objekt gut zu verhalten. Mein Problem kommt vom btKinematicCharacterController, mit dem ich meinen Charakter bewege. das Zeug ist laut dem ganzen Internet total abgehört: /.