我正在製作類似增強現實應用程序的東西,其中我有一個OpenGL場景,無論iOS設備如何移動,我都想保持與重力保持一致。我認爲我已經用CMDeviceMotion.attitude.pitch設置好了,直到我發現iPhone傾向於與這個數字混淆。所以我從pARk *例子中拿了一些代碼,現在我正試圖隔離圍繞垂直訪問的旋轉。我正在繪製的場景不關心用戶面對的是哪個標題,這些數字將始終與觀看者相距一定距離。我認爲,當我計算出垂直軸旋轉分量時,我可以將其旋轉並將其從旋轉矩陣中乘以,以便在用戶更改標題時保持OpenGL數字不變。從CoreMotion的態度旋轉中分離並移除水平旋轉Matrix0
這裏是我的代碼:
CMDeviceMotion *d = motionManager.deviceMotion;
if (d != nil) {
CMRotationMatrix r = d.attitude.rotationMatrix;
transformFromCMRotationMatrix(cameraTransform, &r);
mat4f_t projectionCameraTransform;
multiplyMatrixAndMatrix(projectionCameraTransform, projectionTransform, cameraTransform);
GLKMatrix4 rotMatrix = GLKMatrix4Make(projectionCameraTransform[0],
projectionCameraTransform[1],
projectionCameraTransform[2],
projectionCameraTransform[3],
projectionCameraTransform[4],
projectionCameraTransform[5],
projectionCameraTransform[6],
projectionCameraTransform[7],
projectionCameraTransform[8],
projectionCameraTransform[9],
projectionCameraTransform[10],
projectionCameraTransform[11],
projectionCameraTransform[12],
projectionCameraTransform[13],
projectionCameraTransform[14],
projectionCameraTransform[15]);
}
我然後使用rotMatrix像往常一樣在OpenGL。
想法,建議?提前致謝。 * pARk示例代碼在實際空間中設置幾個點,計算出用戶的位置和這些點的相對方向,並在屏幕上繪製它們,以便看起來漂浮在指向它們位置的地平線上。
我想你應該使用attitude.rotationMatrix而不是處理roll/pitch/yaw。使用rotationMatrix,您不會遇到「接近垂直」位置的問題。 –
attitude.rotationMatrix是我原來問題的第三行。如果您可以建議如何以不同方式使用它,請在完整答案中完成,我會嘗試。 – Craig