我正在开发一个 iOS 增强现实应用程序。它是基于位置的,而不是基于标记的。
我使用 GPS、指南针和加速度计来获取纬度、经度、高度和 3 个欧拉角:偏航角、俯仰角和滚动角。我知道使用 NSLog() 这 6 个变量包含有效数据。
我的应用程序在相机视图上显示了一些 3d 对象。只要我使用除滚动角之外的所有东西,它就可以正常工作。
如果我添加第三个角度,则应用于我的 opengl 世界的旋转效果不好。我在主要的 OpenGL 绘制方法中这样做
glRotatef(pitch, 1, 0, 0);
glRotatef(yaw, 0, 1, 0);
//glRotatef(roll, 0, 0, 1);
我认为这种方法有问题,但我肯定不是专家。也许我应该创建某种独特的旋转矩阵而不是 3 个不同的?
也许这不容易?毕竟大多数桌面视频游戏,FPS之类的,只是让用户使用鼠标来改变偏航和俯仰角,所以只有2个角度,而不是3个。但是不像鼠标,它是一个2d设备,一个用于增强的手机现实可以在任何角度移动。
但是话又说回来,我在网上看到的所有 AR 教程都无法正确处理“滚动”。使用一些滚动补偿策略,“滚动”你的手机要么完全弄乱 AR 的东西,要么什么都不做。
所以我的问题是,假设我使用手机传感器有 3 个欧拉角,我应该如何将它们应用于我的 3d opengl 视图?