通过Swift设置ARKit方向

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通过Swift设置ARKit方向相关的知识,希望对你有一定的参考价值。

我正在使用OpenGL开发一个ARKit应用程序,因此直接使用ARKit而不使用SceneKit。

默认情况下,ARKit设置为横向,但我无法跟踪任何文档或示例以旋转为纵向。 SceneKit示例以纵向工作,但Metal示例仅适用于横向。

是否可以更改ARKit跟踪方向?

答案

通过将相机矩阵乘以基于设备方向旋转的四元数,我能够在应用程序逻辑中解决这个问题。

另一答案

对于objective-c抱歉。

找到并重写这个

uniforms->viewMatrix = [frame.camera viewMatrixForOrientation:UIInterfaceOrientationLandscapeRight];
uniforms->projectionMatrix = [frame.camera projectionMatrixForOrientation:UIInterfaceOrientationLandscapeRight viewportSize:_viewportSize zNear:0.001 zFar:1000];

uniforms->viewMatrix = [frame.camera viewMatrixForOrientation:[[UIApplication sharedApplication] statusBarOrientation]];
uniforms->projectionMatrix = [frame.camera projectionMatrixForOrientation:[[UIApplication sharedApplication] statusBarOrientation] viewportSize:_viewportSize zNear:0.001 zFar:1000];

CGAffineTransform displayToCameraTransform = CGAffineTransformInvert([frame displayTransformForOrientation:UIInterfaceOrientationLandscapeRight viewportSize:_viewportSize]);

CGAffineTransform displayToCameraTransform = CGAffineTransformInvert([frame displayTransformForOrientation:[[UIApplication sharedApplication] statusBarOrientation] viewportSize:_viewportSize]);
另一答案

目前在ios 11 Beta,只有水平曲面跟踪plane detection

默认情况下,平面检测已关闭。如果启用水平平面检测,会话将添加ARPlaneAnchor对象,并在其捕获的视频图像的分析检测到看似平坦的区域时通知您的ARSessionDelegate,ARSCNViewDelegate或ARSKViewDelegate对象。

如果您需要垂直跟踪,请使用hitTest(_:types:)函数自行完成。它允许您检查现实世界中的表面或对象。

命中测试搜索通过AR会话处理摄像机图像检测到的真实世界对象或表面。图像坐标中的2D点可以指沿着3D线的任何点,其从设备相机开始并且在由设备方向和相机投影确定的方向上延伸。此方法沿着该线搜索,按照与相机的距离的顺序返回与其相交的所有对象。

以上是关于通过Swift设置ARKit方向的主要内容,如果未能解决你的问题,请参考以下文章

Swift 4,设备方向

将 arkit 快照直接保存到照片库 swift 4

ARKit 添加 UIView xib 文件 Swift 4

UE4.18 ARKit使用教程

在 ARKit 中查找用户面向的方向

如何使用 ARKit / swift ViewController 创建 React Native 组件?