2014-09-04 8 views
0

Я пытаюсь повернуть модель в 3D так, чтобы она находилась в правильном направлении. Вращение, которое я хочу, довольно тривиально и может быть разбито на два этапа:Как рассчитать ось вращения и угол?

  1. Поверните модель на 90 градусов по оси x.
  2. Поверните модель на 180 градусов по ее оси z (относительно первого вращения).

Способ установки вращения модели в используемой структуре (openFrameworks) заключается в вызове метода setRotation. Этот метод принимает угол, а также поплавки x, y и z, которые определяют ось вращения. Как рассчитать ось вращения и угол для данного вращения? Я не могу повернуть модель два раза подряд, потому что любой вызов setRotation перезаписывает предыдущие вращения.

Пожалуйста, дайте мне знать, если я могу предоставить больше информации или ясности.

EDIT: В случае, если у кого-то есть тот же вопрос, этот пост helped me a lot.

+0

Ссылка на сообщение сломана. Вот почему есть предпочтение фактически включать/суммировать контент на этом сайте. – ray

ответ

1

странно, что вы не можете применить более одного преобразования ...может быть, вы просто использовать неправильную функцию, но в любом случае:

Если у вас есть прямой доступ к преобразованию матрицы (или получить, набор)

  1. Google для преобразования матриц, если у вас нет знаний
    • Я подозреваю, что вы используете 4x4 однородных декартовое преобразование матриц
    • transform matrix anatomy
  2. генерировать первую гниль ция матрицы и хранить ее в M1
    • можно использовать setRotation для этого
  3. генерируют вторую матрицу вращения и хранить его в M2
  4. умножать их M=M1*M2
  5. использовать этот M вместо setRotation

Если вы не имеете прямого доступа к матрице преобразования и должны использовать только setRotation

  • в этом случае вы должны использовать кватернион, который вектор 4D вы называете setRotation с
  • Google для кватернионов математики и найти применение 2-х вращений
  • Я не использую их так что я не могу помочь с этим, но есть также уравнения там
  • , которая преобразует матрицу вращения 3х3 в кватернион и обратно
  • так что вы все еще можете использовать алгоритм выше
  • получить M
  • извлечь матрицу вращения от него (это просто к югу матрица опустить последнюю строку и столбец)
  • вычислить кватернион из него
  • и вызвать setRotation с результатом
Смежные вопросы