2011-04-05 23 views
0

嘿,我在我的opengl/sfml遊戲中設置了一些碰撞,有點「延遲」。它沒有太多的錯誤,只是尋求一些幫助。我使用Bullet Physics(這是API參考),我一直在尋找不同的功能和類。然後我注意到有這些演示文件包含在lbrary中,所以在查看它們時我不完全理解它們。我將如何使用子彈物理庫建立碰撞?

他們推薦我使用的主要庫是CollisionInterfaceDemo,因爲我已經在opengl中使用了GLM模型,並且用於2D目的的sfml和窗口。

即時通訊只是想知道如果有人知道我將如何能夠在我的遊戲中實現碰撞。

+0

如果您能夠編譯並運行演示程序,哪一個與您之後的行爲類型最匹配? – 2011-04-05 23:31:09

回答

1

不知道這是否是你追求的,但是這是基本的剛體物理我的設置代碼:

#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); 

這將會給你一個簡單的物理模擬與在機構的移動方式控制碰撞和相互彈開,子彈剛體。

+0

好吧,ima玩這個有點,看看我在哪裏,謝謝:)還有我應該包括哪些標題?只是所以我不會分散xD – Molmasepic 2011-04-06 21:28:29

+0

btBulletDynamicsCommon.h包括所有你需要的到目前爲止 – 2011-04-06 23:17:14

+0

嘿'new YourCustomMotionState(...); '部分,這是我的模型,例如GLM模型或其他?只是確保我這樣做的權利 – Molmasepic 2011-04-07 00:58:23

1

如何插入子彈物理到iOS設備上:iOS OpenGL BulletPhysics Sample Code

下載示例代碼或遵循與iOS openGL的模板創建一個新項目形式的Xcode:

  1. 下載Bullet物理...把它變成一個文件夾類似如下:

*(請注意,有是包含Xcode項目文件的項目文件夾)

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

1.5。在物理目錄中運行CMake來編譯框架(假設你已經安裝了cmake CMake)這個步驟對於我上傳的示例代碼是可選的,因爲它已經包含了編譯後的框架......它使文件達到100 megs,但是什麼是無論如何,這些天有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文件通常是可可。您必須更改您希望添加物理引擎代碼的類,以便擴展名爲.mm,這意味着它應該被編譯爲Objective-C++代碼。

  1. 在您要添加現在是一個Objective-C++文件或文件CPP物理特定的類,添加行

    #include "btBulletDynamicsCommon.h" 
    

,你應該編譯...錯誤是沒有找到該文件...

  1. 接下來轉到MyProjectFolder/bullet-2.78/src並將src文件夾拖到您的項目中。
  2. 刪除名爲BulletMultiThread的文件夾...這將消除試圖編譯一些OPENCL(.CL)文件

  3. 最後一步,從你的Bullet物理安裝的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 ...