如何解释 iOS 相机视图透视上标记的现实世界地标对象的偏航和俯仰倾斜

问题描述 投票:0回答:1

拥有一个 iOS 应用程序,可以在相机视图中实时标记地标(例如建筑物、用户的山脉),即用户在他面前看到的内容。当它笔直时,没有问题并且准确(在合理的 GPS 误差范围内)。当用户倾斜手机时,无论是偏航还是俯仰运动,地标标签也应该相应调整,但我不太清楚做到这一点的最佳方法。

看图tilt rotations

我尝试在图像上下文上使用内置的rotateBy转换,其中midX和midY分别是屏幕宽度和高度的中心位置:

UIGraphicsPushContext(ctx)
ctx.saveGState()
ctx.translateBy(x: midX, y:  midY)
ctx.rotate(by: -self.deviceYawAngle)
ctx.translateBy(x: -midX, y: -midY)
...
...
ctx.restoreGState()
UIGraphicsPopContext()

这对于处理“偏航”旋转来说效果很好,但我不确定如何合并俯仰部分,因为直观上它是 3d 而不仅仅是屏幕上的 2d 投影。

我尝试过的另一件事是想象它是一个视锥体并手动进行三角学。例如。对于俯仰旋转,我可以根据俯仰角计算出偏移量。我再次遇到的问题是如何将其与偏航旋转结合起来。

看图

trig for perspective change 任何见解将不胜感激,谢谢!

swift transform trigonometry projection perspectivecamera
1个回答
0
投票
如何创建新的 CMAttitude 参考系以使重力位于 Y 轴上

有很大帮助,以从新的参考系中找到我需要的实际偏航值。 最终变换(平移和旋转)的更新代码以实现效果如下:

original dist. to landmark x sin(pitch angle)

倾斜角和偏航角与直立手机相关,如下所示 

diagram

© www.soinside.com 2019 - 2024. All rights reserved.