【问题标题】:apply force to an object in specefic direction with bullet physics使用子弹物理在特定方向上对物体施加力
【发布时间】:2014-06-24 17:21:47
【问题描述】:

我正在尝试从相机原点发射立方体,使用相机方向作为射击线。我希望能够用 int 改变镜头中传递的能量。

查看网上找到的各种代码后,以下似乎是我正在寻找的。​​p>

obj.body.applyCentralImpulse(Vector3);    

Vector3 给出 X,Y,Z 方向的力

下面给出了相机正在看的方向

Vector3 dir = cam.direction;

如何将 dir 和所需的力结合起来?

非常感谢。

【问题讨论】:

标签: libgdx bullet bulletphysics


【解决方案1】:

这对我来说是这样的:

float force = 10.0f;   //but any value that works for you
Vector3 dir = normalize(cam.origin + cam.direction) * force; //suppose your camera moves around
body->applyCentralImpulse(dir);

【讨论】:

  • 您确定要使用相机位置进行强制吗?我觉得不对。
  • @SteveSmith 我不使用相机位置作为力...力只是你评论中的常数
  • 您正在应用dir 作为冲力,dir 设置为添加到方向的相机位置(然后被修改)。
  • 是的,但是如果您查看您的代码,它完全一样,不同之处在于我手动计算方向矢量并用力将其放大,而您使用 cam.direction ...结果是一样的
  • OP 想要向摄像机的方向发射立方体。拿您的代码来说,如果凸轮位于 (x, y, z) 10, 10, 10,并且凸轮方向(例如)向上 (0, 1, 0),则加在一起变为 10, 11, 10。如果您将其归一化并乘以(例如)1的力,您将施加(大约)5.5、6.1、5.5的冲力,这不会向上发射立方体。使用我的代码,它将是 0、1、0 的冲力,即向上。
【解决方案2】:

这应该可行:-

Vector3 dir = new Vector3(cam.direction);
obj.body.applyCentralImpulse(dir.scl(force));

只需将force 替换为各种值,直到找到一个运行良好的值。

【讨论】: