Как получить вращение (угол Эйлера) между двумя трехмерными векторами? (чтобы сделать формат bvh) - PullRequest
0 голосов
/ 04 августа 2020

Я конвертирую последовательность трехмерных координат в файл bvh. Я сделал ИЕРАРХИЮ, используя первый кадр (не Т-образную позу), и я хочу использовать остальные кадры для создания части ДВИЖЕНИЯ.

Я не знаю точное значение используемого угла Эйлера в формате bvh. Например, когда есть два вектора v1 и v2, как показано на рисунке ниже

введите описание изображения здесь

v1 = (X1, Y1, Z1) v2 = (X2, Y2, Z2)

Два вектора были одинаковой длины и повернуты от v1 до v2.

Как получить поворот (угол Эйлера в формате bvh) между 2 векторами?

1 Ответ

0 голосов
/ 21 августа 2020

Я не знаю, отвечает ли это «значению» угла Эйлера в формате BVH, но в BVH углы Эйлера кости в данном кадре представляют собой поворот кости из базовой позиции, а не из предыдущий кадр. Базовая позиция - это СМЕЩЕНИЕ, определенное в ИЕРАРХИИ. Вы должны проверить Объяснение форматов файлов захвата движения Мередит и Мэддок, они предлагают более глубокое обсуждение формата файла BVH.

Чтобы найти матрицу вращения для поворота вектора v1 на vector v2, вы можете использовать уравнение, приведенное в ответе Юра ван ден Берга здесь . Затем вы можете восстановить углы Эйлера, используя алгоритм Shoemake , обратите внимание, что порядок вращения изменит уравнения. Но если базовая позиция вашей кости не l ie на v1, вам нужно вычислить вращение от ее базовой позиции, а не от v1.

...