問題タブ [bullet]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - Bullet: btBvhTriangleMeshShape のクラッシュ
だから私はこのコード行を持っています:
これは私のプログラムをクラッシュさせます。どうやら、関数内のどこかにassert(numIndices>0)
、クラッシュの原因となっている行があります。
false
行末にパラメータをもう 1 つ追加すると、次のようになります。
バウンディング ボリューム データを生成しないように指示すると、正常に続行されます (クラッシュは発生しません)。私の質問は次のとおりです。 に明らかにインデックスがmeshInterface
あるのに、クラッシュしてインデックスがないと言われるのはなぜですか。
追加情報:
meshInterface
次のように作成されます。
すでに別のオブジェクトにデータをセットアップしており、それを弾丸のセットアップにロードするだけです。
ここで、 my に明らかに有効なデータがあることがわかりますmeshInterface
。メッシュは平面です。
ogre - OgreBullet を使用した Ogre3D
実際の問題
私は Ogre3D 1.7 で作業しており、OgreBullet ライブラリ (Bullet 2.82 物理ライブラリのラッパー) を構築しようとしていますが、いくつかのキャスト エラーがあります:
コードを変更していないので、コンパイルできない理由がわかりません。誰かにこのエラーがありましたか?
編集 (以前のエラーは解決されました):
このエラーがある場合
次の行でstatic_castをconst_castに置き換えてみてください。
game-physics - Ammo.js による 3D ソフトボディ物理学?
ソフト ボディの物理は Ammo.js に移植されていないと聞いています。いくつか質問があります:
- なんで?JavaScript には計算量が多すぎるでしょうか?
- Bullet エンジンのソフト ボディ物理部分を含む JavaScript ビルドはありますか?
- Bullet のソフト ボディの物理演算は、JavaScript バージョンを試してみるのに十分な信頼性がありますか?
EDIT1:ああ、バックアップとして:Ammo.jsで不可能または非常に難しい場合、他の代替手段はありますか?
c++ - Bullet Physics マルチスフィア ボディが地面に吸い込まれる
私はこれを修正しようと何度か試みましたが、ここ/フォーラム/グーグルで見つけたものをすべて読んでください。オブジェクトの移動速度よりも低い CCD しきい値マッシュを使用し、オブジェクトの半半径よりもはるかに小さい CCD 半径を使用しました。これが行う唯一のことは、マルチスフィアが継ぎ目に引っかかるようにすることです。ERP/ERP2も0.9/1.0にしてみました。[編集] わかりました。もう少し読んだ後。球体がすでに地面に接触している場合、CCD は機能しません。ERP は、私の理解が正しければ、ジョイントのあるオブジェクトにのみ影響を与えます。
地面は Blender で作成したトリメッシュで、obtainStaticNodeShape を使用して形状を取得します。より小さなポリゴンを取得するためにメッシュをスケーリングしようとしましたが、最小の (ゲームで許容される) サイズでさえ機能しません。[編集] マルチスフィアは 2 つのスフィアを重ね合わせたものであり、Y 軸周りの角運動のみに制限されているため、ローリングはありません。
球体はゆっくりと沈みません。64 サブステップで fixedtimestep を 1/420 に小さくしようとしましたが、より良い結果は得られませんでした。これは、坂道を上り下りする際に最も頻繁に発生します。私の地面は緩やかに傾斜していますが、20% の傾斜で十分に落下するように見えますが、平地でも発生する可能性がありますが、それほど頻繁ではありません.
最初のテストを行ったとき、地面として大きく伸ばした立方体を使用しましたが、うまく機能しました。
だから私の問題は、なぜこれが起こっているのかわからないので、次に何を試すべきかわからないということですか?どなたか解決策やヒントを教えてください。
マルチスフィアのサイズを大きくすることに何か意味はありますか (ゲームでは 25 ~ 30% 以上大きくすることはできません)。衝突マージンを明示的に設定していませんが、これによりスフィアが地面に浮くだけになると思いますか? 地面を静的なオブジェクトからキネマティックに変更するメリットはありますか?
地面より低い場合、球体から真下にレイテストを使用して押し上げてもうまくいきますか? そもそも地面を検出できたのに、なぜ落ちてしまうのでしょうか..?
[編集: 追加情報] フォーラムやスタック オーバーフローで同様の問題がかなりの数発生しています。ほとんどは非常に小さなオブジェクトに関するものです。小さなオブジェクト (>0.2m) は、シミュレーション ステップの数を大幅に増やしたい場合を除き、bullet には適していません。私の最小のオブジェクトは直径 0.9m であるため、私の問題はこのカテゴリには当てはまらないようです?
また、デバッグ描画を行って、グラウンドとして使用するトリメッシュの法線を確認しました。法線にエラーは見つかりません。
また、球体の衝突マージンを増やそうとしましたが、役に立ちませんでした。
さらに、推奨される設定を使用しようとしました: ((btDefaultCollisionConfiguration)world.collisionConfiguration).setPlaneConvexMultipointIterations(3,3); ((btDefaultCollisionConfiguration)world.collisionConfiguration).setConvexConvexMultipointIterations(3, 3); 変わりはない。
ただし、大きなトリメッシュがレイキャスティングでうまく機能しないことについて読みました。私のメッシュは 512x512 ユニットと大きいのですが、これによりオブジェクトがメッシュを通り抜ける可能性があるかどうかはわかりません。
また、球形にはトリメッシュに問題があることも読みましたが、これが私の場合かどうかはわかりませんか? 私が使用している球は、すべての軸で回転がロックされています。
btCapsule も使用してみましたが、同じ結果が得られました。シリンダーの方がうまく機能しますか? [編集] 球体とカプセルが機能しなかったため、代わりに円柱を使用してみました。シリンダーの働きが良くなりました。私はまだそれが一度落ちることがあります。球体/カプセルが非常に速く簡単に通過する場所を通過する前に、クラインダーは多くのけいれんを起こしていました. たぶん、これは下にある問題の手がかりになるでしょうか?円柱はキャラの形には不向きですが..
別の理由として、メッシュ内の三角形の辺が長すぎるか、辺間の比率が大きいことが考えられます。私の球がいつも落ちる斜面にそれらのいくつかを見つけました. これが本当に問題である場合、Blender でメッシュを手動で編集する以外に何かできることはありますか?
ご覧のとおり、これらの質問はたくさんあり、考えられる答えもたくさんありますが、どれが私のケースに対応するのかわかりません。洞察力のある人がいくつかのポインターを提供してくれることは非常に意味があります。ありがとう!
opengl - レンダリング中に予期しないフライング ボックスが発生する
写真の簡単なサンプルについては、次のとおりです。
これは正常です:
これは、X 軸または Y 軸で 180 度回転した後です。
なぜこれが起こっているのか、まったくわかりません。私は OpenTK を使用して単純な Bullet 物理シーンをレンダリングしています。コードは簡単で、マトリックスの処理方法に問題があるように思えます。これは単純なレンダリング コードです。
私はそれをコンポーネントに分解しようとしました: 並進ベクトルは問題なく、スケーリングも問題なく、Z 軸での回転も問題ないように見えます... X 軸または Y 軸で回転を追加すると、飛行が開始されます。コンソール出力を行っています。ボックスは、両方の画像で Z 軸上で正確に 6.9999 にあります。
どこが間違っていますか?私は何が欠けていますか?どうすればこれを修正できますか?!
javascript - BulletPhysics (ammo.js) - オブジェクトに力を加えるにはどうすればよいですか?
明確にするためにammo.js
-mscriptenを使用したBullet Physicsのポートです
力を入れて押す必要があるキャラクター (基本的にはブロック) があります。フォースのすべての方法を試しましたが (と思います)、それでもブロックを動かすことができません。
setVelocity(1,0,0)
ブロックを動かすことすらありません - 重力がブロックに作用するのを止めるだけです!
applyImpulse([0,0,200000],[0,0,0])
絶対に何もしません。
applyForce([0,0,200000],[0,0,0])
絶対に何もしません。
3d - エッジ衝突で間違った衝突法線を修正する方法を見つける
主な問題は、Bullet 2 (具体的には 2.82 - おそらく Bullet 3 もまだチェックしていない) がエッジ衝突をお粗末に処理し、歪んだ反応法線を生成することです。
テスト ケース 1: 小さなbtBoxShape
が (0,9,0) に配置され、垂直方向に配置され、別のボックスの (同様に作成されたbtBoxShape
) 面に落下し、整列します。法線は適切に計算され、衝突は Y (垂直) 軸でのみ発生します。ボックスは OY 軸上でわずかに跳ね返り、その中心にとどまります。
テスト ケース 2: 配置された (0,9,0) 垂直に配置された小さなボックス (同上) が別のボックスの面 (今回btBvhTriangleMeshShape
は 2 つの同一平面上にある三角形から作成されたもの) に落下し、これも同じ位置に配置されました。法線が正しく計算されていません。すべての軸で衝突が発生しています。ボックスが横に跳ね返ることがあり、(特定の衝突座標によっては) 非常に目に見えることがあります。
法線をハードコーディングし、それに基づいて衝突ポイントを再計算しても (以下を参照)、役に立ちません。
NB を使用しても、tri 情報を適切に設定し、コードがbtAdjustInternalEdgeContacts
正常に実行されていることを確認しても、目に見える形では役に立ちません。これは機能し、シミュレーションの信頼性をいくらか向上させますが (CPU コストはかなり高くなります)、それでもこの特定の問題は解決しません。
問題は、ケース 2 の動作をケース 1 の動作に合わせて修正する方法です。この状況を回避する方法 (コードの説明は歓迎)、またはこれが本来の方法で機能しない理由を歓迎します。
さらなる参照:
https://github.com/bulletphysics/bullet3/issues/92
http://www.bulletphysics.org/Bullet/phpBB3/viewtopic.php?f=9&t=8113
https://bullet.googlecode.com/files/GDC10_Coumans_Erwin_Contact.pdf
https://code.google.com/p/bullet/issues/detail?id=27
http://www.bulletphysics.org/Bullet/phpBB3/viewtopic.php?f=9&t=4603