2016-10-29 7 views
0

私は現在、物理エンジンとしてBox2DまたはChipmunk2Dを使用できる2D物理抽象レイヤーに取り組んでいます。私は当初、Chipmunk2Dを使用していて、今はBox2Dを実装しています。私が遭遇した問題の1つは、Box2Dの最大速度(b2_maxTranslationによって定義されたもの)でした。この問題を解決するために、私は世界を拡大してBox2Dユニットに合わせることにしました。Scaling Physics World

現在、私は一定の率で縮小しています:

  • 力(ポリゴン・フィクスチャの定義と円の半径を含む)

    • 位置を
    • インパルス(b2Body :: ApplyForceを呼び出す前に)(呼び出す前に、 b2Body :: ApplyLinearImpulse)

    私はフィクスチャを定義するために密度を使用しているので、ボディの質量もスケールダウンします。

    私が気づいたことは、これは機能しません。私が力を加えるときはいつも、体はスケールが高いときよりもはるかに速く動く。

    ボディを正しく更新するためにスケールする必要があるものがありますか、あるいはインパルスとフォースを他の方法でスケールする必要がありますか?

  • 答えて

    0

    は、私は(私はダンピング効果をスケーリング気にしませんでした)次のことをやってしまった:

    ベロシティ(SetLinearVelocity) - リニア

    フォース(ApplyForce) - 立方

    位置(CreateFixture DEF任意の固定具) - リニア

    質量(GetMass) - スクエア

    重力(SETGラビリティ) - リニア

    インパルス分解(PostSolve WorldManifold。正常) - キュービック、逆

    • 線形= X *設計因子
    • 平方= X * X *設計因子
    • 立方= X * X * X *設計因子

    これらの要因でいくつかのテストを行いましたが、角速度や線形の動きを保つうえで問題なく動作していました。参考までにhttps://bitbucket.org/Kipt88/polymorph/src/b4d29e2434a2ed1eda2183f9e16f4782c40ee026/modules/physics2d/files/source/box2d/?at=masterを参照してください(ソースコードは更新されていません)。

    0

    私はb2_maxTranslationの設定になることを避けるために世界を拡大しません。私はすべての物理ユニットをMKSユニットに正規化しておき、b2_maxTranslationの値を上げるか、ステップ関数の頻度を上げてください。私は最高速度を倍増したい場合例えば

    は、私は、二重(2.0fから4.0fまで)b2_maxTranslation値でコンパイルしたいか、私には2倍の数のステップのメソッドを実行し、各の半分をシミュレートする必要があるだろう私はそうでなければそれをシミュレートさせるだろう。すべてのユニットがMKSに標準化されているので、Box2Dはそれらのユニットを直接取るでしょうし、Chipmunkもそうだと思います。

    ただし、MKS単位にスケールされた値を使用しなかったエンジンでは、MKSからそのエンジンの単位に値をスケーリングします。

    これが役に立ちます。ジオメトリをスケールスケールのXを考える

    +0

    良い提案ではありますが、値の縮尺を決めるものではありません。私は別の答えを投稿して、どのようにして終わったかを示します。 –