Ich mache eine 3D-Physik-Engine zum Würfeln. Bisher war ein Würfel 1x1x1m groß und die Schwerkraft 9,82 m / s ^ 2. Dies sieht natürlich nicht realistisch aus, da die Würfel auf alles etwas langsam reagieren.
Um dies zu beheben, habe ich versucht, einfach alle Größen zu ändern, damit ein Würfel etwa 0,02 m entlang einer Seite liegt. Dadurch erhielten meine inversen Massen und inversen Trägheitsmatrizen sehr große Werte, was zu numerischer Instabilität führte.
Was ist der beste Weg, um damit umzugehen? Kann ich den Maßstab so hoch halten, dass ein Würfel 1x1x1 ist und nur die Masse oder Größe der einwirkenden Kräfte ändert? Oder sollte ich etwas anderes optimieren?
Ich denke, dasselbe Problem könnte auftauchen, wenn Sie ein Spiel mit sehr großen physischen Körpern wie Raumschiffen oder etwas anderem gemacht haben. Ich hoffe, dass jemand zuvor auf etwas Ähnliches gestoßen ist.
quelle
Antworten:
Du könntest
quelle
Falls Sie Probleme mit kleinen Zahlenwerten haben, schlage ich vor, dass Sie einfach alles verkleinern. Sie könnten sogar keine "echten" Maßeinheiten verwenden, sondern nur einige "generische" Einheiten, die nur im Motor sinnvoll sind.
Die erste Option, die Verkleinerung, würde erfordern, dass Sie Millimeter oder Zentimeter als Basismaßeinheit verwenden. Die Dimensionen Ihres Würfels würden dann nicht an Präzision verlieren.
Die zweite Lösung ist im Grunde dasselbe, aber dann müssten Sie nicht über die tatsächlichen Einheiten nachdenken.
Warum änderst du nicht einfach die Masse des Würfels?
quelle
Die Bullet Physics-Bibliothek enthält eine Wiki-Seite zum Skalieren der Physikwelt . Diese Informationen sind wahrscheinlich auch für andere Physik-Engines hilfreich.
quelle
Ich dachte, ich sollte meine endgültige Lösung des Problems mitteilen. Das Erhöhen der Schwerkraftkonstante, wie vorgeschlagen, ließ die Würfel sich tatsächlich schneller bewegen, was den Eindruck einer korrekten Skalierung erweckte. Dies erhöhte jedoch die Probleme des Mikrospringens. Ich fügte Mikrokollisionen hinzu, die das Problem milderten, obwohl sie es nicht perfekt lösten. Beachten Sie, dass dies nur für "kleine" Objekte zu einem Problem wird. Wenn Sie das umgekehrte Problem haben und sehr große Objekte (Raumschiffe oder ähnliches) simulieren möchten, treten überhaupt keine Probleme mit dem Mikrosprung auf und Sie können sich damit herumschlagen diese Lösung.
So fand ich die höchste Schwerkraft, die ich haben konnte, ohne viel zu viel "Microbouncing" zu bekommen. Dann benutzte ich eine einfache Erschütterungserkennung am Telefon, die auf große Änderungen der Beschleunigungsmesser-Messwerte reagierte und Impulse auf alle Objekte ausübte, wenn solche Erschütterungen erkannt wurden. Es ist nicht perfekt, aber da es die Würfel schnell bewegt, wenn das Telefon geschüttelt wird, vermittelt es den Eindruck von "winzigen" Würfeln. Es ist ein bisschen hacken, aber es muss gehen :) Hier ist ein Clip des Motors in Aktion.
quelle