Как конвертировать Eigen :: Quaternion & lt; float & gt; в Matrix4f?

Как видно из названия, у меня есть проблема, чтобы преобразовать Quaternion к Matrix4f, Eigen имеет метод Quaternion.toRotationMatrix() что дает мне Matrix3f,
Теперь мне нужно Matrix4f (потому что наша программа предназначена только для Matrix4f), есть ли простой способ добиться этого?

2

Решение

М3 до М4

Ответ уже есть, данный Робом и Найзеро.
В большинстве случаев будет достаточно построить матрицу следующим образом:

м3:

|a00|a01|a02|
|a10|a11|a12|
|a20|a21|a22|

до м4:

|a00|a01|a02| 0 |
|a10|a11|a12| 0 |
|a20|a21|a22| 0 |
| 0 | 0 | 0 | 1 |

Матрица 4×4 позволяет не только вращать вектор, но и смещать (переводить) и масштабировать (во всех трех направлениях) любой вектор. Таким образом, в основном вы получили полную матрицу преобразования — вот почему она часто используется в компьютерной графике, описывая преобразование объекта. В зависимости от порядка строки-столбца, мы можем определить матрицу как:

|rot|rot|rot| sx |
|rot|rot|rot| sy |
|rot|rot|rot| sz |
| x | y | z | 1 |

с sx, sy, sz в качестве масштабных коэффициентов и x, y, z в качестве коэффициентов перевода.

PS: конечно, если вы хотите повернуть вектор с помощью m4, вам придется использовать 4-мерный вектор, например, (x, y, z, w) с w = 1 (в большинстве случаев).

Прямой подход

Преобразовать кватернион вращения в матрицу вращения?

И моя личная рекомендация:
http://www.euclideanspace.com/maths/geometry/rotations/conversions/quaternionToMatrix/
Там вы найдете и другие трансформации, backtrafos и так далее.

5

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

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

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