Поскольку это сложный вопрос, который обычно приводит к большой путанице (я уже задавал варианты этого вопроса ранее, но никогда не задавал вопрос правильно и так и не получил ответа), я постараюсь прояснить его как возможный.
Факты:
- Я использую Unity.
- Я могу легко получить векторы вперед, вверх и вправо из любого вращения Quaternion.
- Я не могу просто записать свои собственные углы Эйлера, изменить их и применить вращение через новый кватернион, потому что объект управляется физикой.
- Я не очень хорошо разбираюсь в математике, если она не написана в коде (или псевдокоде), так что это было бы для меня наиболее полезно.
- Мне было бы легче понять ответ в стиле C ++, но я могу разработать практически любой код.
- Я НЕ пытаюсь заставить кого-нибудь написать код за меня! Я прошу только ответ в коде или псевдокоде, потому что я так и не научился читать обычные математические закорючки; Я программист, а не математик.
- Unity использует левостороннюю систему координат. X = вправо, Y = вверх, Z = вперед.
Что я пытаюсь сделать:
Я пытаюсь воспроизвести анимацию на структуре кости гуманоида и, используя крутящий момент (силу вращения), толкаю физическую куклу примерно в ту же позу, что и структура кости.
Проблема:
Я могу полностью работать с Quaternion вплоть до момента, когда мне нужно приложить крутящий момент к твердым телам. Функция AddTorque
эффективно работает с углами Эйлера, что означает, что я не могу использовать кватернионы. Я легко могу извлечь углы Эйлера из кватернионов, но они ненадежны и вызывают сильное разбухание тряпичной куклы.
Что мне нужно:
Мне нужно рассчитать надежные трехмерные углы Эйлера (например, те, которые не меняются с + на - «случайным образом») из векторов вперед, вверх и вправо. Я понимаю, что это немного сложно, но вот почему я спрашиваю здесь: мне не хватает знаний и опыта, чтобы решить эту проблему самостоятельно.
Учитывая, что сами векторы надежны, я не вижу причин, по которым нельзя было бы вычислить по ним надежные углы Эйлера. Кроме того, я не знаю, какой порядок вращения мне нужен или нужен для углов Эйлера, но я считаю, что позже его будет довольно легко изменить.
Любая помощь приветствуется!
Forward, Up and Right
, поэтому мы должны перепроектировать тест. - person Beta   schedule 14.06.2014Slerp
в course.cms.caltech.edu/cs171/quatut.pdf . Вы можете параметризоватьt
в нем какt(tSmooth)
, чтобы получить плавную кривую в зависимости от вашего сглаженного времениtSmooth
, для которого вы можете рассчитать угловое ускорение (формула для угловой скорости приведена в документе). Угловое ускорение, выраженное в местных координатах, - это то, что вам нужно дляAddTorque
. - person Tobias   schedule 14.06.2014Slerp
функцию для своих четверок. Ваш комментарий вселяет во меня большую надежду, потому что это позволит мне полностью работать с четвертями и никогда не придется пытаться получить углы Эйлера. Я не очень разбираюсь в математике, особенно когда пишу в стандартной форме (как в той статье), хотя, как ни странно, я действительно знаю, что такое лента Мебиуса, так как недавно был в университете на дне открытых дверей. Интересно, не могли бы вы дать полный ответ, который уточняет ... продолжение - person Clonkex   schedule 14.06.2014