问题标签 [bulletphysics]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1625 浏览

visual-studio-2010 - 将 Bullet 物理和 Boost 作为静态库一起编译

我为名为 Orbiter 的太空飞行模拟器开发插件:http: //orbit.medphys.ucl.ac.uk/

它接受插件作为 dll 文件。我最近制作了一个插件,它也使用了 Bullet 物理库。它静态链接到 dll,因此子弹库本身不是 dll,而是直接编译到插件中。Bullet 使用用于发布的多线程 (/MT) 选项和用于调试的多线程调试 (/MTd) 选项进行编译

现在我想使用来自 Boost 的线程。所以我通过从 Boost Pro 安装程序中选择 2 个静态选项来安装静态 Boost 库。我能够使用这些静态库成功创建一个 Win 32 应用程序。该应用程序也使用了多线程 (/MT)。所以我知道标志上没有不匹配。

然而,当我将 Boost 添加到也有 Bullet 的 Orbiter dll 插件项目时,我收到一个链接错误:

1>----- 构建开始:项目:Bump,配置:发布 Win32 ------

1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppBuild.targets(990,5): 警告 MSB8012: TargetPath(F:\Orbiter\Orbitersdk\samples\BumpThreaded\Release\ Bump.dll) 与链接器的 OutputFile 属性值 (F:\Orbiter\Modules\Plugin\Bump.dll) 不匹配。这可能会导致您的项目构建不正确。要更正此问题,请确保 $(OutDir)、$(TargetName) 和 $(TargetExt) 属性值与 %(Link.OutputFile) 中指定的值匹配。

1>MSVCRT.lib(ti_inst.obj) : error LNK2005: "private: __thiscall type_info::type_info(class type_info const &)" (??0type_info@@AAE@ABV0@@Z) 已经在 LIBCMT.lib(typinfo .obj)

1>MSVCRT.lib(ti_inst.obj) : error LNK2005: "private: class type_info & __thiscall type_info::operator=(class type_info const &)" (??4type_info@@AAEAAV0@ABV0@@Z) 已在 LIBCMT 中定义.lib(typinfo.obj) 1> 创建库 F:\Orbiter\Orbitersdk\samples\BumpThreaded\Release\Bump.lib 和对象 F:\Orbiter\Orbitersdk\samples\BumpThreaded\Release\Bump.exp

1>LINK : 警告 LNK4098: defaultlib 'MSVCRT' 与其他库的使用冲突;使用 /NODEFAULTLIB:library 1>......\Modules\Plugin\Bump.dll:致命错误 LNK1169:找到一个或多个多重定义符号

========== 构建:0 成功,1 失败,3 最新,0 跳过 ==========

从我读到的其他问题来看,这可能是由于在应用程序中使用的 2 个库的标志不匹配。但这里不是这样。Bullet 和 Boost 都使用 /MT 编译。

boost 也适用于普通的 win 32 应用程序,那么为什么在静态链接它以输出 dll 时出现问题?

我使用 Visual Studio 2010 Express 并拥有 Windows 7 64 位系统。

提前感谢您的帮助:)

0 投票
1 回答
1060 浏览

c++ - 防止在子弹物理中应用脉冲的碰撞

我正在使用 Bullet 和 Ogre 开发第三人称射击游戏。当角色模型与世界上的一个对象(例如一个加电装置)发生碰撞时,碰撞会对角色施加一个力并导致它们旋转。如何防止碰撞对角色施加力?

我为 btDynamicsWorld::setInternalTickCallback 设置了一个方法,所以我知道哪些物体正在碰撞以及 btManifoldPoint。

请注意,我将扭矩应用到身体上以便顺利旋转它们,所以我不能简单地阻止旋转。

谢谢你的帮助。

0 投票
1 回答
1428 浏览

c# - 我怎样才能让我的物理对象安定下来?

我正在使用 BulletSharp,子弹库的 C# 发行版。我一直在一个据说恢复为 0.0f 的对象中出现一些弹跳。

我有一个动态圆柱体(即将成为网格)落在两个静态圆​​柱体上。像这样:

起始物体位置

顶部的圆柱体经常剧烈地弹跳,通常弹到一边。

这是我用来设置场景的代码:

以及我world.StepSimulation(0.05f, 100, 0.0005f);用来更新物理模拟的每一帧。

我是否缺少任何明显的设置?为什么我的模拟会这样做?

小更新:我已经成功地在 Blender 的 Bullet 中进行了类似的模拟。那里没有弹跳……我不知道那和这之间可能有什么区别。

0 投票
1 回答
3945 浏览

bulletphysics - 将 [-90, 90] 范围内的偏航欧拉角转换为 [0, 360]

是否可以转换从子弹物理引擎获得的偏航欧拉角使用

在 [0 , 360] 范围内。否则,对于 360 度旋转,我得到的欧拉角从 0->90->0-> -90 -> 0 变化

但我想从 0->90->180->270->0

我的图形 API 只接受 0 到 360 范围内的旋转角度


嗯,0->90->0->-90 是音高值。这是我现在使用的代码:

我试图为音高的负值添加 180,但这不起作用。好吧,看来我需要找到另一种使用欧拉角平滑旋转网格的方法。


更新:看来我不应该直接使用项目符号功能。更好的选择是直接处理基矩阵:

所以这给了我关于 y 轴的旋转。现在关于其他 2 ....呸!

0 投票
3 回答
29174 浏览

c++ - 子弹物理最简单的碰撞示例

我正在尝试仅使用 Bullet Physics 进行碰撞检测。我不需要它为我移动任何对象或使用回调处理渲染。我只想在每一帧更新对象位置,并用它来告诉我何时发生碰撞。为了获得最简单的示例,我试图找到以 btBoxShape 作为形状的对象之间的碰撞。一切运行良好,没有崩溃或明显的内存泄漏,但我没有发生冲突,所以我一定在某个地方犯了一些错误。我会尽量保持简短,而不会遗漏任何重要的内容。

这是我的世界设置功能:

现在我有 btCollisionObject* 类型的玩家和敌人对象。我正在像这样设置它们:

我对我的敌人对象做同样的事情。

然后每一帧我都用这样的东西更新我的所有对象:

最后,这是定义我的结果回调的结构:

我看过很多演示,但它们似乎大多将运动留给 Bullet,而且由于我在角色碰撞时以设定的速度移动角色而没有任何特殊的物理特性,所以我很难将示例调整为我的应用程序。结果回调实际上来自论坛上的这篇文章: http ://bulletphysics.org/Bullet/phpBB3/viewtopic.php?t=6816 这是关于使用三角形网格,但它似乎最接近我试图实现的。

无论如何,如果你读到这里,谢谢!非常感谢您提供的任何建议或链接。

0 投票
0 回答
278 浏览

c++ - 使用 Bullet Physics 创建电影

我正在尝试从我的子弹演示中制作电影。为此,我想在每个时间步存储一个图像,并使用 ffmpeg 创建一个电影。

我需要模拟一次只前进一步。为此,我正在做

之后,我存储场景(我稍后创建场景的图像)。在动画结束时,我正在使用时间步长 200 fps (1/0.005) 创建电影。这应该给我实时动画,但动画有点慢。

有任何想法吗?

0 投票
1 回答
945 浏览

c++ - 在 Bullet Physics 中替代刚体模拟?

我想在 Bullet Physics 引擎中创建自己的刚体模拟算法。有没有办法用我的替换 btrigidbody 集成,但仍保持模拟的其余部分(碰撞检测、接触响应等)?

我只是想比较不同的集成算法(显式欧拉、隐式、龙格库塔等)

我虽然是从 btRigidBody 继承的,但问题是 btRigidBody 的方法不是虚拟的,所以我的方法没有被调用。

有什么建议么?

谢谢!

0 投票
2 回答
732 浏览

java - 如何在 JBullet 中定义自定义网格?

我正在创建一个游戏,我想使用 JBullet 物理引擎。我搜索了 Javadocs,但没有找到任何东西。如何定义与 JBullet 一起使用的自定义形状?我正在寻找将顶点和索引数组传递到其中的东西,还是有其他解决方案?谢谢 :D

0 投票
0 回答
601 浏览

game-physics - (无限)滚动轨迹如地形的子弹物理策略

我试图找到我们在 Bullet 中有哪些选项来实现像地形这样的滚动轨迹,一旦地形段(或瓷砖)滚动出视野,就会被重复使用。

在诸如 Box2D 和 Chipmunk 之类的 2D 引擎中,我会用分段形状或多边形形状布置静态碰撞体,一旦它们不在视野范围内,就会重新定位它们。这是一个描述在 Box2D 的 ActionScript 版本中完成的链接:http ://www.emanueleferonato.com/2011/10/04/create-a-terrain-like-the-one-in-tiny-wings-with- flash-and-box2d-%E2%80%93-adding-more-bumps/

查看一些文档,似乎在 Bullet 中我们有多个形状选项,例如 btHeightfieldTerrainShapes 或 btStaticPlaneShapes 或 btBoxShapes。此外,我还查看了 BulletPhysics 附带的演示中的 AppConcaveDemo,我看到它使用的是 btBvhTriangleMeshShape,并且正在重新计算顶点。也许这会是更好的选择吗?

看着这些不同的选项,我想知道是否有任何想法如何最好地实现这样的目标,记住地形水平滚动,类似于游戏 TinyWings,应该像 HotWheels 赛车轨道一样狭窄。

我不是在寻找详细的技术实现,而是讨论一种技术相对于另一种技术的优点,将性能作为主要考虑因素。

注意:不确定是否值得一提,但这种地形会与刚体和软体相互作用。

谢谢,

克劳迪娅

0 投票
1 回答
5975 浏览

android - 如何绘制/渲染子弹物理碰撞体/形状?

我已经使用 NDK 在我的 android 程序中实现了 Bullet Physics 引擎(我正在使用Vuforia 的imagetarget 示例 for android),它已设置并正常工作,但是我想渲染/绘制我的碰撞框/飞机以查看我的刚体(btRigidBody)/碰撞形状(btCollisionShape),我很肯定这是可能的,但我找不到任何关于如何做到这一点的教程!

我已经在他们的 wiki 页面上获取了 hello world Bullet 物理教程并对其进行了修改,以将下落物理体的转换应用到我在 opengl es 2.0 中拥有的 3d 对象以查看碰撞体,这是我用来渲染的代码反对:

编辑:查看 btBoxShape 的代码,我注意到您可以获取框顶点和法线:

但是您无法获取索引列表以按特定顺序绘制顶点!