ARKit中的屏幕空间是什么意思?

时间:2018-07-09 15:36:47

标签: ios augmented-reality arkit wwdc

当我观看第805节“创建出色的AR体验”的视频时,他们提到在AR中显示文本时使用屏幕空间文本。他们以Measure应用程序为例,该应用程序运行良好。

我想实现类似的功能。但是,我无法弄清楚。

2 个答案:

答案 0 :(得分:7)

屏幕空间是显示器的2D像素坐标系。在这里,您通常会执行一些操作,例如在屏幕空间中布置UIKit小部件等。

“屏幕空间”的替代方法是3D坐标空间,该空间与跟踪ARKit的3D世界或用于在AR中显示虚拟3D内容的3D渲染引擎有关。 (在那种情况下,要考虑多个3D空间,例如“绝对”世界空间与相对于相机的位置。)

如WWDC18演讲Creating Great AR Experiences中所述,屏幕空间是一种显示固有2D内容(如文本)的好方法,而无论其距现实世界的距离或方向如何,其都保持可读性该内容与之相关。 (如果您要将该文本标签放置在世界空间中,那么当您远离文本标签时,它会变得很小并且不可读。)

ARKit并没有给您任何自动的方式来使2D屏幕空间内容遵循3D世界空间的位置,但是要自己实现这一点并不是特别困难。这是叠加遵循3D位置的UIView的一般方法:

  1. 在您希望显示屏幕空间内容的真实位置添加一个ARAnchor
  2. 使用每帧回调(如果您将SceneKit与ARSCNView一起使用,则使用renderer(_:didUpdate:for:)renderer(_:updateAtTime:);如果要构建自己的渲染器,则使用session(_:didUpdate:))该锚的当前3D位置。
  3. 投影3D位置(ARSCNView projectPointARCamera projectPoint)以获取该3D位置在屏幕上出现的2D点。
  4. 设置UIView的位置以匹配该点。

对于更高级的情况,例如Measure应用如何使其屏幕空间标签平行于两个3D点之间的线,您需要投影两个端点并使用类似atan2的函数来获取角度用于旋转标签。

答案 1 :(得分:2)

默认情况下,由于iPhone的运动传感器,ARKit中的世界(或绝对)坐标系被定向为重力(垂直轴)。 ARKit中的World Coordinates(在3D空间中)是固定的,并且iPhone的前后摄像头在这些坐标内移动。因此,如果您需要相对于iPhone当前位置进行任何操作,则首先需要转换为Camera Space(也在3D空间中)。

但是Screen Space(又称Projection Space)是iPhone屏幕的2D空间。显示屏上Screen Space中的一个红色3D小像素(例如,距离相机100米)。

我相信WWDC'18演示者会在iPhone屏幕上强大的文本可见性的基础上向我们介绍屏幕空间。就是这样。

阅读这篇出色的Matrices帖子以获取更多详细信息。