C++ 如何使用Bullet物理库设置碰撞?

C++ 如何使用Bullet物理库设置碰撞?,c++,opengl,sfml,glm-math,bulletphysics,C++,Opengl,Sfml,Glm Math,Bulletphysics,嘿,在我的opengl/sfml游戏中设置一些冲突时,我有点“延迟”。这不是什么错误,只是请求一些帮助。我正在使用(这是API参考),我一直在研究不同的函数和类。然后我注意到lbrary中包含了演示,所以在查看它们时,我并不完全理解它们 他们建议我使用的主要库是CollisionInterfaceDemo,因为我已经在opengl中使用了GLM用于模型,在2D和窗口中使用了sfml 我只是想知道是否有人知道我将如何在我的游戏中实现碰撞。不确定这是否是您想要的,但这是我的基本刚体物理设置代码: #

嘿,在我的opengl/sfml游戏中设置一些冲突时,我有点“延迟”。这不是什么错误,只是请求一些帮助。我正在使用(这是API参考),我一直在研究不同的函数和类。然后我注意到lbrary中包含了演示,所以在查看它们时,我并不完全理解它们

他们建议我使用的主要库是CollisionInterfaceDemo,因为我已经在opengl中使用了GLM用于模型,在2D和窗口中使用了sfml


我只是想知道是否有人知道我将如何在我的游戏中实现碰撞。

不确定这是否是您想要的,但这是我的基本刚体物理设置代码:

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

这将为您提供一个简单的物理模拟,其中刚体相互碰撞并反弹,子弹控制着物体的移动方式。

如何将子弹物理插入iOS:

下载示例代码或使用iOS openGL模板执行新的项目表单Xcode:

  • 下载子弹物理。。。将其放入如下文件夹:
  • *(请注意,有一个包含Xcode项目文件的项目文件夹)

    1.5。在physics目录下运行CMake编译框架(假设您已经安装了CMake),这一步对于我上传的示例代码是可选的,因为它已经包含了编译后的框架…这使得文件的容量达到了100兆,但现在到底是什么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
    
  • 转到MyProject.xcproj并在Xcode中打开
  • 在XCode中转到任何要添加物理代码的文件。。。必须理解CPP文件是C++和.m.文件通常是COCOA。您必须更改要添加物理引擎代码的类,使其具有.mm扩展名,表示它应编译为Objective-C++代码

  • 在要添加物理(现在是Objective-C++文件或cpp文件)的特定类中,添加行

    #include "btBulletDynamicsCommon.h"
    
  • 你应该编译…错误是找不到文件

  • 接下来转到MyProjectFolder/bullet-2.78/src并将src文件夹拖到项目中
  • 删除名为BulletMultiThread的文件夹…它将消除尝试编译某些openCL(.cl)文件的错误

  • 最后一步,将以下框架从bullet physics安装的src文件夹复制到项目中:

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

  • 构建并运行。。。现在应该可以顺利编译到iOS和Mac了


  • 如果你能够编译并运行演示,那么哪一个最符合你所追求的行为?好的,我来玩一下,看看我从哪里得到的,谢谢:)我应该包括哪些标题?只是为了不分散XDBTBulletDynamicCommon.h,它包含了到目前为止您所需要的所有内容—新的YourCustomMotionState(…)部分,这是我的模型吗?例如GLM模型或其他什么?只要确保我做得对基本上你必须编写你自己的类派生自btMotionState当Bullet调用setWorldTransform()时更新你的模型好的我做了第一部分,但我正在考虑如何设置碰撞形状,例如胶囊?
    #include "btBulletDynamicsCommon.h"