Как видно из названия, у меня есть проблема, чтобы преобразовать Quaternion
к Matrix4f
, Eigen
имеет метод Quaternion.toRotationMatrix()
что дает мне Matrix3f
,
Теперь мне нужно Matrix4f
(потому что наша программа предназначена только для Matrix4f
), есть ли простой способ добиться этого?
М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 и так далее.
Других решений пока нет …