2015-11-27 3 views
2

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

ответ

0

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

Смежные вопросы