Я пытаюсь сделать простой велосипед с двумя шинами и является жестким телом. Так как он имеет только 2 шины, он продолжает падать.Вращающийся объект только по оси 1
Итак, чтобы сбалансировать транспортное средство, я пытаюсь использовать кватернионы, чтобы вращать его только по оси Y, чтобы держать его стоящим, давая ему movabiloty на другой оси 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).