如何将子弹物理学整合到我的游戏中?


12

我下载了在此处找到的发行文件,但不确定从哪里开始。在我的游戏中,我有多个椭圆和一个球体,我希望所有这些相互碰撞。(它们都有网格和相关的边界体积)

编辑-我只是意识到长方体实际上与AABB关联。我想至少得改变一下。

我需要遵循哪些步骤?


2
您是否看过本章下的手册,4.4 Integration overview我知道它是很精简的,但确实描述了基本过程。因此,如果您查看示例代码示例的代码,那么您应该不会有太多问题。
PeterT 2012年

还要查看bullet文件夹中的示例,那里有一堆'em
Maik Semder'Feb

@MaikSemder我不太确定如何打开特定的。是仅Linux文件吗?
SirYakalot '02

实际上,有关如何打开示例的注释将非常有用,然后我可以看到它们如何将这些内容链接在一起。我会用谷歌搜索,但是我想我应该问。
SirYakalot

这取决于您使用的平台。对于Windows上的Visual Studio,示例中有一个.sln文件,我认为这是您使用的文件。只需在bullet文件夹中搜索sln文件。
Maik Semder '02

Answers:


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。您稍后需要知道此文件夹的路径。

里面有两个文件夹,您需要在项目中引用它们。第一个是src文件夹,其中包含.h包含在源代码中的头文件。第二个是lib文件夹,其中.lib包含将链接到项目的库文件。请注意,包含和链接是两件事。

但是该lib文件夹现在应该为空,因为您尚未构建引擎。因此,例如,请参阅有关如何使用CMake和Visual Studio生成项目的手册。在第7页。

你成功后,你应该有至少三个文件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

之后,您应该能够构建并运行您的项目。


我不敢问,但...我该如何做一些非常基础的工作,例如在游戏中包含正确的文件?如果您需要具体信息,我正在寻找可以解决刚体碰撞的文件。也非常感谢您到目前为止的帮助!
SirYakalot '02

@AsherEinhorn检查我的编辑。
David Gouveia '02

@AsherEinhorn没问题,几年前我第一次使用C ++库时,这也让我感到迷惑。
David Gouveia'2

是的,到目前为止,这只是我一直避免的事情之一,我游戏中的所有代码都是我的,但是尝试编写自己的物理引擎只是浪费时间,因为其他人比我做得更好也许会。
SirYakalot

@AsherEinhorn是的,即使游戏看起来很简单,也不必编写自己的物理引擎。我第一次使用物理引擎是在尝试自己在一个简单的2D游戏中实现它之后。我使用分隔轴定理实现了OBB-OBB碰撞检测,但是当我到达需要碰撞响应的点时,我完全陷入了困境。然后我觉得我不妨尝试一个物理引擎(特别是我使用Box2D),并在不到一小时的时间内就完成了所有工作。
David Gouveia
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.