弾丸の物理演算をゲームに統合するにはどうすればよいですか?


12

ここにあるリリースファイルをダウンロードしましたが、どこから始めればよいかわかりません。私のゲームでは、長方形と球体がいくつかあるので、これらすべてを互いに衝突させたい。(それらにはすべてメッシュと関連する境界ボリュームがあります)

編集-直方体には実際にAABBが関連付けられていることに気づきました。少なくともそれを変える必要があると思います。

どのような手順に従う必要がありますか?


2
4.4 Integration overview非常に質素であることがわかっている章の下にあるマニュアルをご覧になりましたが、それは基本的なプロセスを説明しています。したがって、それとデモの例のコードを見ると、それほど多くの問題が発生しないはずです。
PeterT

また、箇条書きフォルダの例も確認してください。「em
Maik Semder

@MaikSemder特定のファイルを開く方法がよくわかりませんでした。Linuxのメイクファイルだけですか?
サーヤカロット、2012

実際に例を開く方法についてのメモは信じられないほど役立つでしょう、そして私はそれらがどのように物事をそこにリンクしているかを見ることができました。私はこれについてググりますが、できる限り尋ねるべきだと思いました。
サーヤカロット、2012

それはあなたのプラットフォームに依存します。Windowsのビジュアルスタジオの場合、例用の.slnファイルがあります。それを使用していると思います。箇条書きフォルダでslnファイルを検索するだけです。
Maik Semder

回答:


21

以下は、実行する必要がある基本的な手順です。

  1. まず、物理シミュレーションを駆動するワールドオブジェクト(つまりbtDiscreteDynamicsWorld)を作成します。

  2. GameObjectおそらく、バウンディングボックスとワールド内の位置/方向とともにモデルを格納するようなクラスがすでにあるはずです。位置/方向情報物理ボディオブジェクト(つまり)のインスタンスに置き換え、モデルをレンダリングするときに、ボディから提供される情報を代わりに使用します。ボディを作成するときは、既存のバウンディングボリュームと一致するボディの質量と衝突シェイプを指定する必要があります。他の質問でもこれについて話しました。btRigidBody

  3. ゲームオブジェクトの各ボディをワールドオブジェクトに追加します。

  4. 世界を踏み出して(つまりstepSimulation、あなたの世界を呼び出すことによって)シミュレーションを更新します。

また、このマニュアルには多くの情報も含まれているため、時間をかけて読んでください。


コメントに対処するための編集

質問する前にうんざりしますが...ゲームに適切なファイルを単に含めるなど、非常に基本的なことを行うにはどうすればよいですか?詳細が必要な場合は、剛体の衝突を処理するファイルを探しています。また、これまでのご協力ありがとうございました!

ええと、あなたのコメントから、これまで外部C ++ライブラリを操作したことがないようです。私がこれを行って久しぶりですが、これが(Visual Studioでの)プロセスを覚えている方法です。

手始めに、私はすでにあなたが必要なものを説明しているマニュアルを引用します:

- #include btBulletDynamicsCommon.h in your source file 
- Required include path: Bullet/src folder 
- Required libraries: BulletDynamics, BulletCollision, LinearMath

上記の条件を満たすために実行する必要がある基本的な手順は次のとおりです...

1.準備ステップ

まず、ダウンロードしたファイルを既知のディレクトリ(例:)に抽出しますC:\Bullet。このフォルダーへのパスは後で知る必要があります。

内部には、プロジェクトで参照する必要のある2つのフォルダーがあります。1つ目は、ソースコードに含めるヘッダーファイルsrcを保持するフォルダーです。2番目は、プロジェクトにリンクするライブラリファイルを保持するフォルダーです。インクルードとリンクは2つの異なるものであることに注意してください。.hlib.lib

ただし、まだエンジンを構築libていないため、フォルダーは今のところ空である必要があります。たとえば、CMakeやVisual Studioを使用してプロジェクトをビルドする方法については、マニュアルを参照してください。7ページです。

あなたが成功したら、中に少なくとも3つのファイルを持っている必要がありますlibフォルダ:BulletDynamics.libBulletCollision.libLinearMath.lib(私はマニュアルから推測しています)。Bulletとプロジェクトを接続する...

2.ヘッダーを含める

まずC:\Bullet\src、プロジェクトのインクルードパスオプションにフォルダーを追加する必要があります。Visual Studioでこれを行うには、プロジェクトを右クリックしConfiguration Properties -> C/C++ -> General -> Additional Include Directories、そこに移動してディレクトリパスを書き込みます。

それを設定した後、あなたは単に#include “btBulletDynamicsCommon.h”あなたのコードで行うことができます。そのヘッダーは、必要なすべての機能のハブとして機能するようです。

3.リンクライブラリ

最後に、上記のライブラリをリンクする必要があります。フリストは、下Configuration Properties -> Linker -> General -> Additional Library Directoriesへのパスを追加しlib、フォルダ、または他の言葉でC:\Bullet\lib

次に、でConfiguration Properties -> Linker -> Input-> Additional Dependencies、ライブラリの名前を依存関係のリストに追加します。各ライブラリをaで区切り;、ファイル拡張子を忘れないでください。したがって、たとえば、これをリストの最後に追加できますBulletDynamics.lib;BulletCollision.lib;LinearMath.lib

この後、プロジェクトをビルドして実行できるはずです。


質問する前にうんざりしますが...ゲームに適切なファイルを単に含めるなど、非常に基本的なことを行うにはどうすればよいですか?詳細が必要な場合は、剛体の衝突を処理するファイルを探しています。また、これまでのご協力ありがとうございました!
サーヤカロット、2012

@AsherEinhorn編集内容を確認してください。
David Gouveia

@AsherEinhorn問題ありません。2年前にC ++ライブラリを初めて使用したときも、これはつまずきました。
David Gouveia

ええ、これは今まで回避してきたことの1つです。ゲームのコードはすべて私のものですが、自分の物理エンジンを作成しようとするのは、他の人が私よりも上手く行っている時間の無駄ですおそらくこれからでしょう。
サーヤカロット

@AsherEinhornはい、ゲームシンプルに見えても、独自の物理エンジンを作成する必要はありません。物理エンジンを初めて使用したのは、単純な2Dゲームに自分で実装しようとした後です。分離軸の定理を使用してOBB-OBB衝突検出を実装しましたが、衝突応答が必要になるポイントに到達すると、完全に行き詰まりました。次に、物理エンジン(特にBox2Dを使用)を試してみようと考え、1時間以内にすべてを稼働させました。
David Gouveia、2012
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.