Вращающийся объект только на 1 оси

Я пытаюсь сделать простой велосипед, который имеет 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).

2

Решение

Я бы порекомендовал пойти другим путем. Если вам придется сбрасывать вращение каждый кадр, это может повлиять на вашу производительность и будет довольно «грязным».
Может быть, попытаться изменить физику для вашего типа транспортного средства.
На данный момент я не получил здесь никакого кода, но документы (справочник по кодированию) и код движка / физики должны вам помочь.
Может быть, взгляните на код GameSDK, чтобы увидеть, как там работают с физикой автомобиля.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]