プールゲームを正しくシミュレートできる物理エンジンの推奨事項 [閉まっている]


13

私はゲームのようなプールゲームを作っています。このゲームには、正しい(または非常に正確な)反射反射が必要です。Box2DBullet Physicsを試しましたが、どちらにもこの問題があります。

図

この画像の上に壁がある場合、プールゲームで実際のボールの赤い線が予想されます。しかし、エンジンはしばしばグリーンラインのコースを示します。特に、

  1. これは、ゆっくりと動くボールが壁に当たった後に起こります。
  2. 急速に動くボールが突然遅くなることがあります。

私は、これらの問題なしで可能な限り正確にプールゲームをシミュレートできる物理エンジンを見つけています。いくつかの推奨事項を入手できますか?今、Newton Game Dynamicsを掘り下げていますが、エンジンが望むものを表示するかどうかはわかりません。次の試行としてPhysXエンジンを検討しており、何も機能しない場合は独自に作成する必要があります。しかし、それは非常に長い時間がかかることは明らかなので、私はそれをしないことを望みます。私の時間を節約していただければ幸いです。そしてもちろん、Box2D / Bullet Physicsによるソリューションも歓迎します。

iOSでC / C ++ / Objective + Cを使用しています。


Box2Dで構成を添付します。

  • 静的ボックス形状
  • 線形/角度減衰= 0.1
  • 反発= 1.0
  • 摩擦= 100
  • 密度= 10
  • bullet = false
  • 固定回転= false
  • 慣性スケール= 1.0

ボール

  • 動的な球形
  • 線形/角度減衰= 0.1
  • 反発= 1.0
  • 摩擦= 100
  • 密度= 20
  • bullet = true
  • 固定回転= false
  • 慣性スケール= 1.0

3
エンジンは間違っていない可能性がありますが、プロパティを設定していないか、何らかの形で間違っているわけではありません。
共産主義のダック


密度1および摩擦0.0〜0.1でテストしましたが、固着し続けます。
エオニル

回答:


8

いくつかのソリューション。

  1. Box2Dの場合b2_velocityThresholdb2Settings.hファイルに設定します。私の場合、私はそれを設定し0.0f、機能しました!質量、摩擦、減衰は問題ではありませんでした。詳細については、このディスカッションスレッドをご覧ください。 http://www.box2d.org/forum/viewtopic.php?f=3&t=6906&p=30782#p30782

  2. 他の物理エンジンを使用します。 デフォルトでこれを正しく実行するように構成されたNewton Game Dynamics。ただし、iOSでNewtonダイナミクスを使用することは可能ですが、他の方法よりもやや困難です。iOS用に設定するのに数日間使用しました。

BulletPhysicsフォーラムでも質問しています。解決策が得られたら、これを更新します。

-(編集)-

Bulletにはいくつかのしきい値属性がありますが、でまったく同じものを見つけることができませんでしたb2_velocityThreshold

これは似ていますが、うまくいきませんでした。

btRigidBody->setContactProcessingThreshold(0.0f)

6

Box2Dは必要な処理を行いますが、壁とボールの固定具の反発(バウンス)定数を設定する必要があります。プールゲームの場合は、おそらく完全な反発と高い摩擦から始めますが、線形および角度のダンピングを行い、そこから微調整します。


数日かけて多くの構成を試しましたが、それでも起こります。良い例がありますか...?
エオニル

3
Box2Dの場合、密度と摩擦の値は非常に大きいようです。

4

物理エンジンにはバウンスしきい値があります。どちらのエンジンでもそれを行う方法はわかりませんが、しきい値を高く設定しすぎると、特定の速度での影響が無視されます。バウンスのしきい値を下げると、低速でバウンスします。

あなたは別の物理エンジンを要求したことは知っていますが、私が知っているすべての物理エンジンは、バウンスしきい値を使用して、オブジェクトが互いの上に座っているときにジッターを防ぎます。したがって、優れた物理エンジンはこの効果があるため、優れた物理エンジンを提案することは逆効果になります。


0

私にはこの問題があり、私にとって解決策は完璧な回復を提供することでした。

だから私にとっては、すべてのオブジェクトの0.5のsqrtです。完璧な状況ではsqrt(r1 * r1 + r2 * r2)== 1だからです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.