2016-03-16 5 views
0

Я работаю с гироскопом и получаю вращательную матрицу, которую я буду использовать для поворота объекта на SceneKit.OpenGL: ось переключения и инвертирования

Это вращение матрица исходя из гироскопа использует ось iPhone в:

enter image description here

Но мое приложение работает пейзаж с кнопкой дома слева. Итак, мои оси являются: Y

  • х = Iphone в
  • у = X отрицательного Iphone в
  • г Z = Iphone в

Итак, мне нужно взять матрицу поворота я есть получая от акселерометра, основанного на [x, y, z] и создавая новый, который является [y, -x, -z] ... (да, отрицательный Z, потому что для этого конкретного случая мне нужен объект для поворота против Z).

Хорошо, что это вращение отрицательно, но как переключить ось X и Y из исходной матрицы в новую?

Это то, что я до сих пор:

// I create a GLKMatrix4 from the CMRotationMatrix 

GLKMatrix4 transform = GLKMatrix4Make(rotMatrix.m11, rotMatrix.m21, rotMatrix.m31, 0.0, 
             rotMatrix.m12, rotMatrix.m22, rotMatrix.m32, 0.0, 
             rotMatrix.m13, rotMatrix.m23, rotMatrix.m33, 0.0, 
             0.0, 0.0, 0.0, 1.0); 

GLKMatrix4 negativeX = GLKMatrix4MakeXRotation(-M_PI); 
GLKMatrix4 rotate = GLKMatrix4Multiply(transform, negativeX); 


GLKMatrix4 negativeZ = GLKMatrix4MakeZRotation(-M_PI); 
rotate = GLKMatrix4Multiply(rotate, negativeZ); 

// ok, now I have [-x, y, -z] 
// how do I switch X and Y and transform that into [y, -x, -z]? 

ответ

1

Матрица 3х3, такие как матрица вращения, применяются в качестве:

[a b c] [x] [a*x + b*y + c*z] x * (a, e, i) + 
[e f g] [y] = [e*x + f*y + g*z] = y * (b, f, j) + 
[i j k] [z] [i*x + j*y + k*z] z * (c, g, z) 

т.е. буквально три вектора. В вашем rotMatrix, (m11, m12, m13) - это вектор, который сообщает вам направление, которое примет преобразованная ось x, (m21, m22, m23) is y и (m31, m32, m33) is z.

Если то, что вы в настоящее время используете для вектора x, является тем, что вы действительно хотите использовать для значения y, просто поменяйте местами столбцы. Если вы хотите отрицательный, просто отрицайте столбец.

+0

получил. ИДЕАЛЬНО! БЛАГОДАРЯ!!!!! – SpaceDog

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

  • Нет связанных вопросов^_^