iOS、立方体地图、指南针和设备运动姿态

iOS、立方体地图、指南针和设备运动姿态,ios,opengl-es,Ios,Opengl Es,我需要在iPhone上显示一个OpenGL立方体贴图(360度全景图像,用作立方体上的纹理)“与北方对齐” 0)全景图像分为六个图像,作为纹理应用到立方体的面上 1) 由于立方体贴图的“前”面不指向北方,我将观察矩阵旋转θ度(手动找到)。这样,当显示GL视图时,它将显示包含北视图的面 2) 我使用CMMotionManager的CMDeviceMotion中的姿态旋转OpenGL地图。视图将正确移动。然而,它还没有与北方“结盟” 到目前为止一切都很好。我只需要将正面与North对齐,然后根据手机

我需要在iPhone上显示一个OpenGL立方体贴图(360度全景图像,用作立方体上的纹理)“与北方对齐”

0)全景图像分为六个图像,作为纹理应用到立方体的面上

1) 由于立方体贴图的“前”面不指向北方,我将观察矩阵旋转θ度(手动找到)。这样,当显示GL视图时,它将显示包含北视图的面

2) 我使用
CMMotionManager
CMDeviceMotion
中的
姿态
旋转OpenGL地图。视图将正确移动。然而,它还没有与北方“结盟”

到目前为止一切都很好。我只需要将正面与North对齐,然后根据手机运动数据旋转它

3) 因此,我从CLLocationManager访问
标题
(指南针标题)。我只阅读了一个
标题
(我收到的第一次更新),并在构建look-at矩阵时在步骤1中使用该值

步骤3之后,OpenGL视图将与周围环境对齐。CMMotionManager在步骤2保持视图(或多或少)对齐。如果我面朝南启动应用程序,立方体的“背面”将显示:它是对齐的

然而,有时第一次罗盘读数不是很准确。此外,随着用户移动手机,其准确性也会提高。其思想是通过考虑罗盘航向的连续读数,不断修改应用于注视矩阵的旋转

因此,我也实施了第4步

4) 我不只是第一次读取
标题
,而是一直从
CLLocationManager
读取更新,并使用它们连续对齐环视矩阵,该矩阵不会按角度θ(在步骤1中手动找到)和罗盘服务返回的角度旋转

第4步后,一切都不起作用:视图固定在某个位置,移动手机不会改变视图。立方体随着手机旋转,这意味着我总是看到立方体的同一面

从我的观点来看(但我显然错了),首先旋转注视矩阵以与North对齐,然后应用由“设备运动姿态”计算的旋转,在步骤3中没有任何变化

我的推理哪一步是错误的