如何在子弹物理引擎中对身体应用旋转?

Posted

技术标签:

【中文标题】如何在子弹物理引擎中对身体应用旋转?【英文标题】:How to apply rotation to a body in Bullet Physics Engine? 【发布时间】:2012-01-02 01:20:41 【问题描述】:

我有旋转值(滚动、俯仰、偏航)。我想将该旋转应用到一个身体,但我不知道该怎么做。

【问题讨论】:

@felipemaia - 我正在使用 Bullet Physics Engine 进行 3D 刚体碰撞检测,我不是在尝试操纵弹道轨迹,我所需要的只是旋转一个身体让我们说一个带有提供旋转值 是的。同意。愚蠢确实是无价的。 【参考方案1】:

最直接的方法是直接设置刚体的世界变换,通过运动状态或直接设置。要获得滚动、俯仰和偏航的变换,您可以使用:

btRigidBody * rigidBody = //...
btTransform tr;
tr.setIdentity();
btQuaternion quat;
quat.setEuler(yaw,pitch,roll); //or quat.setEulerZYX depending on the ordering you want
tr.setRotation(quat);

rigidBody->setCenterOfMassTransform(tr);

【讨论】:

使用 btDefaultSerializer 将世界保存到 .bullet 文件时是否保存了此转换? @rraallvv 我肯定希望刚体的变换会被序列化,所以除非我遗漏了什么(这是可能的,我已经有一段时间没有使用子弹了),是的。

以上是关于如何在子弹物理引擎中对身体应用旋转?的主要内容,如果未能解决你的问题,请参考以下文章

您如何在子弹物理引擎中模拟传送带?

如何在子弹物理中获得刚体在 0 到 360 之间的欧拉旋转?

Unity的物理引擎是如何实现碰撞的呢?

[原][osg][osgEarth]关于在OE中使用物理引擎的调研

Bullet物理引擎在OpenGL中的应用

cocos2d-x box2d物理引擎深入研究 第一篇之旋转关节详解(b2RevoluteJoint)