Я работаю над интегрированием Razer Hydra в свой проект. Интеграция не сложна, и основные функции уже хорошо работают. Тем не менее, у меня есть проблема, и я не могу решить ее сам. Речь идет о вращении. Проблема в том, что пространство Sixense SDK и мое пространство не совпадают. Но единственным отличием является знак Z-оси. Здесь вы можете увидеть на картинке для лучшего понимания:Вращающаяся матрица между двумя пространствами
Теперь я получаю матрицу вращения 3х3 из каждого гидры контроллера. Но для его использования мне нужно преобразовать матрицу вращения в матрицу вращения для моего пространства. Я делаю это вот так:
float (*mat)[3];
mat = hydra.controllerRight.rot_mat;
float x1 = mat[0][0];
float x2 = mat[0][1];
float x3 = mat[0][2];
float x4 = 0;
float y1 = mat[1][0];
float y2 = mat[1][1];
float y3 = mat[1][2];
float y4 = 0;
float z1 = mat[2][0];
float z2 = mat[2][1];
float z3 = mat[2][2];
float z4 = 0;
float w1 = 0;
float w2 = 0;
float w3 = 0;
float w4 = 1;
// my 4x4 rotation matrix
MatrixF rotMat(x1, x2, x3, x4,
y1, y2, y3, y4,
z1, z2, z3, z4,
w1, w2, w3, w4);
Теперь, конечно, результаты с использованием этой матрицы вращения ошибочны. Но я не могу понять, что делать, чтобы исправить это. Я опробовал тонны конфигураций, начиная с инвертирования значений z над транспонированием матрицы, потому что я не уверен в структуре шестимерной матрицы.
Может ли кто-нибудь помочь мне здесь?