我目前正在使用增強現實,爲此我想使用陀螺儀和Core Motion。我研究了Apple pARk示例代碼,我瞭解了大部分我花時間閱讀文檔的數學,因爲乍一看還不清楚!一切都很好,直到我試圖使它在橫向模式下工作。在橫向模式下使用Core Motion
我不會在這裏解釋所有的理論,它會太長。但對於那些經歷過它的人來說,我的問題是,我們採用態度的旋轉矩陣來將這個旋轉應用到我們的座標上。好吧,直到這裏纔算正常,但Core Motion似乎並不適應風景模式。我在這個問題上看到了類似的問題,但看起來沒有人有解決方案。
於是,我就做我自己,這裏就是我的想法:
每次我們旋轉裝置景觀,+ -90°旋轉時(取決於景觀左或右)。我決定創建一個4X4旋轉矩陣來應用這個旋轉。然後乘到cameraTransform矩陣(態度的3X3 CMRotationMatrix以4X4的自適應),然後我們獲得矩陣cameraTransformRotated:
- (void)createMatLandscape{
switch(cameraOrientation){
case UIDeviceOrientationLandscapeLeft:
landscapeRightTransform[0] = cos(degreesToRadians(90));
landscapeRightTransform[1] = -sin(degreesToRadians(90));
landscapeRightTransform[2] = 0;
landscapeRightTransform[3] = 0;
landscapeRightTransform[4] = sin(degreesToRadians(90));
landscapeRightTransform[5] = cos(degreesToRadians(90));
landscapeRightTransform[6] = 0;
landscapeRightTransform[7] = 0;
landscapeRightTransform[8] = 0;
landscapeRightTransform[9] = 0;
landscapeRightTransform[10] = 1;
landscapeRightTransform[11] = 0;
landscapeRightTransform[12] = 0;
landscapeRightTransform[13] = 0;
landscapeRightTransform[14] = 0;
landscapeRightTransform[15] = 1;
multiplyMatrixAndMatrix(cameraTransformRotated, cameraTransform, landscapeRightTransform);
break;
case UIDeviceOrientationLandscapeRight:
landscapeLeftTransform[0] = cos(degreesToRadians(-90));
landscapeLeftTransform[1] = -sin(degreesToRadians(-90));
landscapeLeftTransform[2] = 0;
landscapeLeftTransform[3] = 0;
landscapeLeftTransform[4] = sin(degreesToRadians(-90));
landscapeLeftTransform[5] = cos(degreesToRadians(-90));
landscapeLeftTransform[6] = 0;
landscapeLeftTransform[7] = 0;
landscapeLeftTransform[8] = 0;
landscapeLeftTransform[9] = 0;
landscapeLeftTransform[10] = 1;
landscapeLeftTransform[11] = 0;
landscapeLeftTransform[12] = 0;
landscapeLeftTransform[13] = 0;
landscapeLeftTransform[14] = 0;
landscapeLeftTransform[15] = 1;
multiplyMatrixAndMatrix(cameraTransformRotated, cameraTransform, landscapeLeftTransform);
break;
default:
cameraTransformRotated[0] = cameraTransform[0];
cameraTransformRotated[1] = cameraTransform[1];
cameraTransformRotated[2] = cameraTransform[2];
cameraTransformRotated[3] = cameraTransform[3];
cameraTransformRotated[4] = cameraTransform[4];
cameraTransformRotated[5] = cameraTransform[5];
cameraTransformRotated[6] = cameraTransform[6];
cameraTransformRotated[7] = cameraTransform[7];
cameraTransformRotated[8] = cameraTransform[8];
cameraTransformRotated[9] = cameraTransform[9];
cameraTransformRotated[10] = cameraTransform[10];
cameraTransformRotated[11] = cameraTransform[11];
cameraTransformRotated[12] = cameraTransform[12];
cameraTransformRotated[13] = cameraTransform[13];
cameraTransformRotated[14] = cameraTransform[14];
cameraTransformRotated[15] = cameraTransform[15];
break;
}
}
然後就在我們更新所有我做的這點:
multiplyMatrixAndMatrix(projectionCameraTransform, projectionTransform, cameraTransformRotated);
之後,其餘的代碼保持不變,我只是希望註解以橫向方向正確顯示。現在,這是我唯一的想法,橫向渲染效果不好,我將設備移動到右側或左側,註釋向下或向上移動(就像當我沒有添加此代碼時)。
有沒有人想出一個解決方案?我會繼續尋找,特別是在CMRotationMatrix上,它似乎不是一個典型的旋轉矩陣,我找不到任何文檔明確說明這個矩陣的不同元素。
我po在這裏提出了一個類似的問題:http://stackoverflow.com/questions/11906611/augmented-reality-app-in-landscape-mode –
運行這個計算出來嗎?這太痛苦了! –