PhysX:关节摩擦/“僵硬”关节

时间:2010-05-28 12:14:58

标签: c++ physx

我正在使用physx(尝试将ik添加到ragdoll)。出于某种原因,所有布娃娃关节都是无摩擦的,因此,布娃娃倾向于“摆动”,特别是当它挂在空中并与几个移动的运动学家相连时。

我想为关节添加摩擦力并使它们“僵硬”。想象一个门(带有极其生锈的铰链)需要被踢几次才能打开 - 即它围绕铰链旋转,但不是很多,快速停止,并且需要很大的力才能使其旋转。 或者想想艺术人体模型(参见谷歌图片中的图片) - 他们的四肢移动,但他们不会自由摆动。

不幸的是,我在physx中找不到与关节摩擦有关的任何内容。我检查过文档,谷歌和标题,找不到任何有用的东西。

那么,我如何用physx实现刚性关节/关节摩擦? (我认为)我已经看过没有这个问题的physx游戏,所以显然应该有一些方法可以做到这一点。

P.S。我不是在谈论关节/解算器的不稳定性。布娃娃稳定(或多或少),关节尊重自由度(关节限制),但关节没有摩擦,我想给它们增加摩擦力。

3 个答案:

答案 0 :(得分:1)

我最近在nvidia论坛上提出了一个可能与此相关的问题:link

不幸的是我没有得到我的问题的真实答案,但设法做我想做的事情,如果你只添加一个没有弹簧常数的阻尼常数,在关节中使用弹簧可能对你有所帮助。这适用于我的情况,但我无法解释为什么这样,虽然我很乐意使用它,但我不完全确定是否推荐它。

我不知道你是否还可以为布娃娃的所有部分添加角度阻尼,这会使它们在开始移动后更快地减速但看起来可能不正确。可能需要尝试的其中一件事。

答案 1 :(得分:0)

我发现this forum thread关于Physx关节的颤抖,不知道你是否已经看过它,但我希望它有所帮助。

答案 2 :(得分:0)

你为什么不尝试:

d6Desc.swingDrive.driveType.raiseFlagMask(NX_D6JOINT_DRIVE_VELOCITY);  d6Desc.swingDrive.forceLimit = 0.1f;  d6Desc.twistDrive.driveType.raiseFlagMask(NX_D6JOINT_DRIVE_VELOCITY);  d6Desc.twistDrive.forceLimit = 0.1f;  d6Desc.driveAngularVelocity.x = 0;  d6Desc.driveAngularVelocity.y = 0;  d6Desc.driveAngularVelocity.z = 0;

用小力将速度驱动到0,这样运动就会减少,你的物体将停止在地板上移动。它不像摩擦而是接近。