gpt4 book ai didi

c++ - 仅在 1 个轴上旋转对象

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:48:18 26 4
gpt4 key购买 nike

我正在尝试制作一辆简单的自行车,它有 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);

}

上面的代码使自行车的旋转与生成时的旋转相同。尽管它是 buggy ,并且会使车辆闪烁。抛开这一点,有人能告诉我如何使用四元数、插值和角度来仅停止我的车辆在一个轴 (Y) 上的旋转,这样它就不会掉下来并允许它在另外两个轴 (X) 上移动&Z).

最佳答案

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

关于c++ - 仅在 1 个轴上旋转对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33962401/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com