2

我正在尝试制作一辆简单的自行车,它有 2 个轮胎,当然是刚体。由于它只有 2 个轮胎,所以它一直在往下掉。

因此,为了平衡车辆,我尝试使用四元数仅在 Y 轴上旋转它,以使其保持站立状态,同时使其在另一个 2 轴(X 和 Z)上具有可移动性。

我采取的方法是检查车辆的旋转是否与它产生时的旋转(它产生站立时)不同,并基于该力将车辆旋转到它在坠落之前的站立方式仅使用 2 个轮胎而不是 4) 的不平衡。这样,我可以让车辆始终保持站立状态,但限制跨其他轴的移动,这反过来又不允许我的车辆侧向行驶,而只能直行和后退。

在您阅读代码之前,我想提一下,我已经简化并缩短了此代码以便于理解,我只是在寻求帮助以了解如何去做,而不是答案代码解决方案。

代码:

Quat qCurrentRotation = GetRotation(); // updated every frame

Quat qTargetRotation = qInitialRotation; // stored when vehicle spawned

qFinalRotation = Quat::CreateIdentity();

if (qCurrentRotation != qTargetRotation)
{
    float fSmoothFactor = 0.1f;

    qFinalRotation = Quat::CreateNlerp(qCurrentRotation, qTargetRotation, qTargetRotation);

    mVehicle->SetRotation(qFinalRotation);

}

上面的代码使自行车具有与生成方式相同的旋转。虽然它是越野车,并使车辆闪烁。撇开这个不谈,有人可以告诉我如何使用四元数、插值和角度来仅停止我的车辆在一个轴 (Y) 上的旋转,这样它就不会倒下并允许它在其他两个轴 (X) 上移动&Z)。

4

1 回答 1

0

我建议采用不同的方法。如果您必须每帧重置旋转,这可能会影响您的性能并且非常“脏”。也许尝试为您的车辆类型覆盖物理。目前我在这里没有代码,但文档(编码参考)和引擎/物理代码应该足够指导你。也许看看 GameSDK 代码,看看那里是如何处理车辆物理的。

于 2016-03-30T23:10:43.467 回答