2015-06-24 4 views
1

Я работаю над интегрированием Razer Hydra в свой проект. Интеграция не сложна, и основные функции уже хорошо работают. Тем не менее, у меня есть проблема, и я не могу решить ее сам. Речь идет о вращении. Проблема в том, что пространство Sixense SDK и мое пространство не совпадают. Но единственным отличием является знак Z-оси. Здесь вы можете увидеть на картинке для лучшего понимания:Вращающаяся матрица между двумя пространствами

http://imgur.com/UShwRIA

Теперь я получаю матрицу вращения 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 над транспонированием матрицы, потому что я не уверен в структуре шестимерной матрицы.

Может ли кто-нибудь помочь мне здесь?

ответ

0

Я предполагаю, что шестимерная матрица является своего рода модельным преобразованием. Вам предоставляется это преобразование в пространстве A (шестимерное пространство), и вы хотите представить преобразование в пространстве B (ваше пространство).

Вы знаете, что система преобразования между двумя пространствами простой матрица отражения:

 /1 0 0 0 \ 
T(B<-A) = | 0 1 0 0 | 
      | 0 0 -1 0 | 
      \ 0 0 0 1/

Чтобы преобразовать вашу модель преобразования в пространстве А M_A к модели преобразования в пространстве В M_B, вы должны умножить:

M_B = T(B<-A) * M_A 

Это соответствует отрицающему третьему ряду матрицы M_A (предполагается, что столбец матрицы-мажорного). Похоже, это может быть все z s в вашем коде. Но это может быть все ..3 s.

Смежные вопросы