1

opengl / sfmlゲームで衝突を設定する際に、少し「遅延」が発生しました。助けを求めるだけで、それほどエラーにはなりません。Bullet Physics (これはAPIリファレンスです)を使用していて、さまざまな関数とクラスを調べています。それから私はライブラリにデモが含まれていることに気づきました、それでそれらを見ている間私はそれらを完全に理解していません。

私がすでにopenglのモデルにGLMを使用し、2D目的とウィンドウにsfmlを使用しているので、彼らが私に使用することを推奨するメインライブラリはCollisionInterfaceDemoです。

誰かが私のゲームで衝突を実装する方法を知っているかどうか疑問に思っています。

4

2 に答える 2

2

これがあなたの求めているものかどうかはわかりませんが、これは基本的な剛体物理学のセットアップ コードです。

#include "btBulletDynamicsCommon.h"

...

m_pBroadphase = new btDbvtBroadphase();
m_pCollisionConfig = new btDefaultCollisionConfiguration();
m_pCollisionDispatcher = new btCollisionDispatcher(m_pCollisionConfig);
m_pSolver = new btSequentialImpulseConstraintSolver();
m_pDynamicsWorld = new btDiscreteDynamicsWorld(m_pCollisionDispatcher, 
                                               m_pBroadphase, 
                                               m_pSolver, 
                                               m_pCollisionConfig);

後は、世界に体を追加するだけの問題です...

btRigidBody::btRigidBodyConstructionInfo info;

// set physical properties like mass, coefficient of restitution etc
info.m_mass = 10;
info.m_restitution = 0.5;
...

// Use a motion state to link the physics body with the graphics object.  
// This is the glue between Bullet and your code, called by bullet to update the 
// position & orientation of the object
info.m_motionState = new YourCustomMotionState(...) ; 

btRigidBody* pRigidBody = new btRigidBody(info);
m_pDynamicsWorld->addRigidBody(pRigidBody);

...そして、フレームごとに世界の状態を更新します。

m_pDynamicsWorld->stepSimulation(deltaTime, m_maxSubSteps);

これにより、物体の動きを制御する Bullet を使用して、互いに衝突して跳ね返る剛体を使用した単純な物理シミュレーションが得られます。

于 2011-04-06T13:42:59.857 に答える
1

Bullet Physics を iOS に挿入する方法: iOS OpenGL BulletPhysics サンプル コード

サンプル コードをダウンロードするか、新しいプロジェクト フォーム Xcode with iOS openGL テンプレートに従います。

  1. Bullet Physics をダウンロード... 次のようなフォルダに入れます。

*(Xcode プロジェクト ファイルを含むプロジェクト用のフォルダーがあることに注意してください)

/MyProjectFolder/bullet-2.78/
/MyProjectFolder/MyProject/MyProject.xcproj

1.5。物理ディレクトリで CMake を実行して、フレームワークをコンパイルします (cmake が既にCMakeをインストールしていると仮定します)。アップロードしたサンプル コードでは、コンパイル済みのフレームワークが既に含まれているため、この手順はオプションです....ファイルは 100 MB になりましたが、とにかく最近は100メガ?

cmake . -G "Unix Makefiles" -DINSTALL_LIBS=ON -DBUILD_SHARED_LIBS=ON     -DFRAMEWORK=ON  -DCMAKE_OSX_ARCHITECTURES='i386;x86_64'     -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_INSTALL_PREFIX=/Library/Frameworks     -DCMAKE_INSTALL_NAME_DIR=/Library/Frameworks -DBUILD_DEMOS:BOOL=OFF
make -j4
sudo make install
  1. MyProject.xcproj に移動し、Xcode で開きます...

XCodeでは、物理コードを追加したい任意のファイルに移動します... cppファイルはc ++であり、.m .hファイルは通常cocoaであることを理解する必要があります。物理エンジン コードを追加するクラスを、Objective-C++ コードとしてコンパイルする必要があることを示す .mm 拡張子を持つように変更する必要があります...

  1. Objective-C++ ファイルまたは cpp ファイルである物理演算を追加する特定のクラスで、次の行を追加します。

    #include "btBulletDynamicsCommon.h"
    

コンパイルする必要があります...エラーは、ファイルが見つからないということです...

  1. 次に MyProjectFolder/bullet-2.78/src に移動し、src フォルダーをプロジェクトにドラッグします。
  2. BulletMultiThread という名前のフォルダを削除します。これにより、一部の openCL (.cl) ファイルをコンパイルしようとする際のエラーが解消されます。

  3. 最後のステップとして、Bullet Physics インストールの src フォルダーから次のフレームワークをプロジェクトにコピーします。

    /MyProjectFolder/bullet-2.78/LinearMath/LinearMath.framework /MyProjectFolder/bullet-2.78/BulletCollision/BulletCollision.framework /MyProjectFolder/bullet-2.78/LinearMath/LinearMath.framework

  4. Build and Run... iOS と Mac にスムーズにコンパイルできるはずです...

于 2011-09-01T18:31:01.990 に答える