问题标签 [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 回答
756 浏览

c++ - 如何在 Bullet Physics 中深度复制 btTriangleMesh?

我使用 Bullet Physics,我需要复制该btTriangleMesh类型的一个实例。

我的目标是将身体的碰撞形状更改为新的三角形网格形状。这个形状应该保存当前存储在triangles变量中的数据,即使这个变量将来发生变化。因此我需要一个深拷贝。

我虽然在堆上实例化一个新变量new btTriangleMesh(triangles)会深度复制对象。但正如您在下图中所见,第一个物体的碰撞形状受到下一个物体的影响。

在图像中,白线代表碰撞形状,而您可以在下面看到实际所需的形状。这是第一具尸体的样子,这里一切都很好。

具有正确碰撞形状的单个块

这就是在右侧插入另一个身体后的样子。第一个身体的形状改变为与第二个身体的形状相同。那不应该发生。图像上可能不清楚,但在 3D 中,您肯定会看到第一个身体的形状发生了变化,与第二个身体完全匹配。

插入第二个块不必要地改变了第一个块的形状

如何深拷贝一个btTriangleMesh?还是我做错了什么?

顺便说一句,我对所有三角形都使用相同的变量作为源的原因是这个变量是由另一个线程异步填充的。

0 投票
2 回答
1044 浏览

android - 使用 Bullet 在球体内的球

我是 Bullet 和所有 3D 和 phisycs 的新手,所以不要生气 :) 我需要在里面创建一个大的静态刚性球体和一个小的动态球体。我想像瓶子一样使用大的,所以小球可以在里面移动,但不能离开球,除了顶部的一个。我在 Blender 中编写了 2 个模型(当然我在大球体上打了一个洞),创建了一个世界并在里面放置了对象。但是当我启动应用程序时,小球体以极快的速度从大球体中抛出。如果有帮助,我还将使用 Bullet 和 Android 的 GDX 库。

此代码初始化世界。

还有一些用于创建大球体的代码

小球体的代码

构造函数类只创建 btRigidBodyConstructionInfo 和 btCollisionShape 对象,构造球体并将其放置在世界中。

那么,你能告诉我如何创建一个里面有一个球的空球体吗?

PS拜托,不要告诉我谷歌,我已经做到了

PPS 对不起我的英语

0 投票
3 回答
9232 浏览

gpu - 与 CPU 上的物理引擎相比,GPU 上的 PhysX 有多快?

我有一个使用Bullet物理引擎编写的应用程序。我在具有 8 个内核的 Intel i7 2600K CPU 上运行它。应用程序必须处理数百万块物理工作,每一个都可以独立完成。它目前运行8 个进程,每个进程独立完成其总配额。总之,这项工作有很多简单的并行性

假设我可以获得最好的 NVIDIA 消费级显卡(比如 Titan),那么通过从 CPU 上的 Bullet 切换到GPU 上的Physx ,我可以看到物理引擎性能的大致改进是什么?也就是说,如果为 Physx 重写,这个应用程序的运行速度大约会快多少?

我找到了几篇比较 Bullet 和 Physx 之间结果质量的论文,但找不到关于性能比较的任何内容。

0 投票
2 回答
2245 浏览

c++ - 移除刚体,但仍会发生碰撞

移除刚体的正确方法是什么,我正在这样做来移除它:

pDynamicsWorld->getCollisionObjectArray()但是,在我做一个之后,该对象仍然出现pDynamicsWorld->stepSimulation

奇怪的是,这不会在 ARM 上发生,只是在 x86 上发生。

0 投票
1 回答
2195 浏览

c++ - Bullet 2.81:找不到已安装的标头?

操作系统:Ubuntu 12.04 64 位

我已经从源代码安装了 Bullet Physics,并且正在尝试

#include <btBulletDynamicsCommon.h>从源文件。

当我编译源文件时,出现以下错误...

error: btBulletDynamicsCommon.h: No such file or directory

以下是我的终端的摘录...

编译器找不到标头是否有特殊原因?

应该注意的是,我正在使用 Code::Blocks 进行构建,尽管如果我尝试将包含在源文件中然后使用我自己的 Makefile 编译它会收到相同的错误(我实际上并没有参考头文件中的任何函数,因此无需链接库)。

0 投票
1 回答
969 浏览

c++ - 无法解决未定义的引用

在 Eclipse 中编译时出现以下错误:

这些是我正在使用的库:

有人知道如何解决这个问题吗?我认为这些库还可以,我不知道为什么不编译。

0 投票
1 回答
154 浏览

c++ - 来自 btRigidBody 底部的子弹射线投射

这可能是一个简单的问题,我从btRigidBody对象的中心进行了有效的光线投射,但它总是击中自己(因为它是从中心投射的)。

使用从我身体底部沿 Y 轴投射的光线的最佳方法是什么?因为我想知道我的身体是否接触到地板。

谢谢。

0 投票
0 回答
376 浏览

ios - 将搅拌机模型导出到 iOS 并沿顶点创建物理体

我进入了我的第一个 3D 游戏。我正在使用搅拌机来创建我的模型,使用子弹进行物理和 Isgl3D 游戏引擎。

到目前为止,我能够

  1. 在搅拌机中创建模型
  2. 使用 Isgl3D 库将其导出到 iPhone 并显示它们。
  3. 沿此模型的顶点创建物理体(对于立方体和球体等简单模型。)

现在我想创建一些复杂的不规则模型,并沿着该模型的顶点创建物理刚体。btTriangleMesh从我的研究中,我发现btBvhTriangleMeshShape它可以用来创建复杂的物理刚体。

我找到了这个线程,其中子弹物理体是沿着使用 POD 导入器从搅拌机导出的模型的顶点创建的。但是他们btConvexHullShape用来创建刚体,这在我的情况下可能不起作用,因为我的要求有不规则的复杂模型。

所以我试图btTriangleMesh沿着我的模型的顶点创建一个,这样我就可以创建一个btBvhTriangleMeshShape来创建我的刚体。

因此,对于初学者,我导出了一个立方体(默认搅拌机立方体,放置在原点)以了解顶点如何存储在Isgl3dMeshNode结构中。这是我的代码

我的getCollisionShapeForNode方法是

并且 NSLog 语句打印..

网格数:1

顶点数:24

指数数量:36

和索引打印为

我不确定我是否理解上面给定的索引(及其指向的顶点)如何构成立方体中的 12 个三角形(每个阶段两个)。我希望索引是这样的(如下所示)

可能我错过了一些明显的东西。但我坚持了一段时间。

任何人都知道从 .POD 文件导出的索引与普通三角形索引有何不同。我不可能从现在打印的索引中制作一个立方体。

还有一个问题,有没有人有一个示例代码可以创建三角形网格来创建物理刚体。

0 投票
1 回答
718 浏览

javascript - 计算滑动的力量/力量

我正在使用 javascript 和 html5 画布制作一个用户交互式轮子,当滑动时会旋转轮子。但是我正在尝试处理滑动的“力量/力量”

什么是计算这个的好公式?

0 投票
1 回答
186 浏览

java - jBullet 相机“支架”不动

我正在使用 jBullet 和 OpenGL 来创建一个基本的游戏引擎。我创建了两个名为ObjectSurface和的类ObjectEntity。基本上 ObjectSurface 没有质量,因此它们不会移动,ObjectEntity 可以通过碰撞或重力移动。

我创建了一个带有命名的 ObjectEntity 对象的相机,cameraHolder以便它可以跌落并发生碰撞等等。

问题是cameraHolder当按下特定的WASD键时它应该移动,但它只移动一个单元并且不再移动。释放按钮时,它会将一个单元移动到相反的方向,以便您在同一位置。并且在cameraHolder移动之后,相机的XYZ被设置为XYZ坐标cameraHolder

但是,该运动适用于因重力而下落的 jBullet 引起的运动。

而当我不使用 jBullet 更新时,cameraHolder 会正常移动。所以问题应该出在 jBullet 更新上。我将在代码中展示这一点。

问题:为什么按下特定的WASD按钮时cameraHolder只移动1个单元然后返回?

这是Camera.java类中运动的代码:

以下是 anObjectEntity的创建方式:

以下是物理世界的创建方式:

如何获取输入和更新物理(可疑代码在此部分):