2016-03-16 95 views
0

我正在使用陀螺儀並獲取rotationMatrix,我將用它來旋轉SceneKit上的一個對象。OpenGL:切換軸和反轉軸

,從陀螺儀來旋轉矩陣使用iPhone的軸:

enter image description here

但我的應用程序的工作景觀與home鍵左側。所以,我的軸是:

  • X = iphone的Y
  • Y = iphone的X
  • Z = iphone的Z

所以,我需要旋轉矩陣我從基於[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

一個3x3矩陣,比如你的旋轉矩陣,應用爲:

[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)是y並且(m31, m32, m33)是z。

如果您當前使用的x向量是您實際想要用於y值的值,則只需交換列。如果你想要消極的話,只需要否定這個專欄。

+0

明白了。完善!謝謝!!!!! – SpaceDog