我在这里有一个思考和搜索问题,无法找到好的方向来看待...... 我正在寻找开发一种算法,通过使用设备运动在360图像(类似球体)中移动。
因此,如果用户将设备指向他的前方,他将获得图像的确定原点。当他在他周围移动设备时,全景图像会根据它移动。
我可以研究一下这个想法或来源吗?
谢谢并祝福Swift的每个人:)
答案 0 :(得分:2)
感谢Kay,我可以走上正确的道路来实现这一效果。
我正在回答这个问题只是为那些寻找同样事物的人提供更多细节。
首先,您需要创建一个CMMotionManager对象。
然后使用startDeviceMotionUpdatesToQueue来处理动作事件。
[self.motionManager startDeviceMotionUpdatesToQueue:[NSOperationQueue currentQueue] withHandler:^(CMDeviceMotion *motion, NSError *error) {
[self processMotion];
}];
在processMotion中你只需要根据前一个态度获得态度:
// Get attitude difference with previous one
CMAttitude *currentAttitude = self.motionManager.deviceMotion.attitude;
[currentAttitude multiplyByInverseOfAttitude:self.referenceAttitude];
由于这个原因,您知道自上次更新以来用户所做的新角度。 然后,在处理视图的位置,将新的欧拉角转换为移动图像所需的像素数。 小心欧拉角在-180,180之间变化,并由Apple以rad给出。这可能很方便:
#define RADIANS_TO_DEGREES(radians) ((radians) * (180.0 / M_PI))
所以在我的情况下,我只计算新的x偏移,因为我只是在x轴上移动。
希望这有帮助。
答案 1 :(得分:1)
我看到了两种简单的方法来实现这一点,而不需要太多的数学麻烦:
这两种方法都应该很容易实现,因此我会从其中一种方法开始。如果您希望拥有更复杂的解决方案,则需要更深入地学习数学。在这种情况下,可能的解决方案可以是使用当前设备法线(例如Finding normal vector to iOS device),将其投影到地球表面平面上并采用圆柱体全景的角度'delta。
在这种情况下,球体投影更容易,因为您可以直接使用正常矢量。