通过Swift设置ARKit方向

问题描述 投票:3回答:3

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

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

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

swift opengl-es scenekit augmented-reality arkit
3个回答
1
投票

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


-1
投票

对于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]);

-2
投票

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

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

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

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

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