仅在1轴上旋转对象

时间:2015-11-27 17:35:58

标签: c++ rotation game-physics quaternions cryengine

我正在努力制作一款简单的自行车,它有2个轮胎,当然是刚性的。因为它只有2个轮胎,所以它一直在下降。

因此,为了平衡车辆,我试图使用四元数仅在Y轴上旋转它以使其保持站立,同时在另一个轴(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)。

1 个答案:

答案 0 :(得分:0)

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