我正在使用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线的任何点,其从设备相机开始并且在由设备方向和相机投影确定的方向上延伸。此方法沿着该线搜索,按照与相机的距离的顺序返回与其相交的所有对象。