2017-11-21 15 views
0

Box2Dでリングの形状を作成するにはどうすればいいですか(リングでは、内部に空のスペースを持つダイナミックな円を意味するので、他のダイナミックオブジェクトをフィットさせることができます)。Box2Dリングの形状

ありがとうございます。

答えて

1

「ベスト」は当然の意見ですが、ここで私が考えることができるいくつかの方法があります。あなたが行くことを決めたもの(コメント欄のように)を教えてください。私は知って好奇心が強いよ!

静止リングのために

リング形状のみを静的にする必要がある場合には、チェーンの形状のうちのリングを構築することが移動するための方法です。リングがダイナミックである必要がある場合、それはあなたが言っているように聞こえるようなものです。

内輪摩擦なしダイナミックリング用

/反発

あなたが内輪に対する物体の摩擦や反発を気にしない場合は、外として円形を使用して物理学を設定することができリングの直径とロープジョイントを使用して、あなたが望む何かを拘束しますのリング(ジョイントの衝突接続設定が間違っているので長い)。ジョイントの最大長さをサークルの半径より小さい距離に設定するだけで済みます。これはリングが自然に回転することを可能にします(外側が円であるため)が、リング内の概念的な内部に対して摩擦や反発の効果を与えません。

完全にシミュレートされた内輪の物理学では、動的リング用

リング内のオブジェクトは、私がしたい道、その後、摩擦と反発している任意の他の表面のようなリングとやり取りできるようにする必要がある場合それを(Box2Dコード自体を変更するのに手間がかからないように)作ることは、多角形の束から外れることを示唆しています。これらはすべて、輪を作るためにサイズが&に位置する必要があり、単一のボディに貼り付けられます。

リングを外すにはいくつのポリゴンが必要かどうか、それらを一緒に突き合わせる方法などの決定を下す必要があります。ポリゴンが小さくて多ければ多いほど、結果は円形のリングを推定します。できるだけ重なり合うポリゴンにぎざぎざがほとんどないことを望む場合、オーバーラップからの過剰計算を避けるために、体の質量を手動で設定することをお勧めします。

あなたのリングは、少なくとも2 * b2_polygonRadiusの最小の厚さ( "skin"を含む)が必要です。それを超えると、あなたが望むリングの太さに合わせてポリゴン寸法の1つをサイズ設定するのはあなた次第です。

あなたは、ジョブのボディに対して相対的な位置の大きさと角度の向きとを一致させるために必要なポリゴンのポイントを決定する関数を書くことをお勧めします。 3面のポリゴンや4面のポリゴンからリングを作ることができました。内側の点の間隔を狭くしないと(直径の違いに合わせて)、4面のポリゴンを使用すると、3面のポリゴンを使用するよりも多くの突き当て問題が発生する可能性がありますが、連続する4面のポリゴンは、三角形のもの。

ダイナミックリングによって変更BOX2Dについては

あなたはどちらかBOX2Dコードをでき変えることに興味/喜んでいる場合:

  1. はとの衝突を処理するために大量の計算コードと衝突コードを拡張エッジ形状とチェーン形状。または...
  2. 独自のリング形状のタイプを作成します。

私はチェーンの形状を使用して動的なリング形状をサポートしていBOX2Dから物理エンジン/ライブラリーを得てきたことを考えると、私はこれを解決していくつかの経験を持っている(PlayRhoを参照)。 Box2Dの外ではあるが。この経験に基づいて、問題を解決するためにBox2Dコードを変更したい場合は、最初の選択肢(オプション#1)から始めるのが少なくとも始める方法だと思います。あなたは、あなたが2番目の選択肢をするつもりなら、とにかく必要と思うものを与える経験から恩恵を受けるでしょう。

広いフェーズでは、とにかにリングの矩形(実際にはAABB)の構成が必要になることに注意してください。だから、リングをポリゴンの合成から外すのは、私がこれを行うと考えることができる他の方法よりもメモリ効率が低いように見えますが、計算効率の点では勝てるかもしれません。 YMMV。テストは確実に知る唯一の方法です。

それとも...

それは可能、誰かがすでにBOX2Dのためにリング形状を作り、それが、私の知る唯一の形状の拡張がカプセルの形状であるためのソースを提供しています。

+0

非常に有益な答えをありがとう!これは確かに実験のための良い指針として役立つでしょう。さらに私が探しているものを指定するには、その内部に他の動的オブジェクトを保持できる動的なリングシェイプオブジェクトが必要です。私は "リング"コンテナを回転させて内側の要素(宝くじのようなもの)に影響を与えるのは素晴らしいビジュアルエフェクトだと思います。 2番目のアプローチは最も簡単ですが、形状を一般化し、後で(LiquidFun拡張を介して)弾力性を適用したいと思っています。このアプローチはパーティクルグループにも当てはまりますか? –

+0

@ P.Lanceパーティクルグループにどのような影響があるのか​​分かりません。ごめんなさい。少なくとも自分の利益のために私はそれを調べます。 –