当我观看第805节“创建出色的AR体验”的视频时,他们提到在AR中显示文本时使用屏幕空间文本。他们以Measure应用程序为例,该应用程序运行良好。
我想实现类似的功能。但是,我无法弄清楚。
答案 0 :(得分:7)
屏幕空间是显示器的2D像素坐标系。在这里,您通常会执行一些操作,例如在屏幕空间中布置UIKit小部件等。
“屏幕空间”的替代方法是3D坐标空间,该空间与跟踪ARKit的3D世界或用于在AR中显示虚拟3D内容的3D渲染引擎有关。 (在那种情况下,要考虑多个3D空间,例如“绝对”世界空间与相对于相机的位置。)
如WWDC18演讲Creating Great AR Experiences中所述,屏幕空间是一种显示固有2D内容(如文本)的好方法,而无论其距现实世界的距离或方向如何,其都保持可读性该内容与之相关。 (如果您要将该文本标签放置在世界空间中,那么当您远离文本标签时,它会变得很小并且不可读。)
ARKit并没有给您任何自动的方式来使2D屏幕空间内容遵循3D世界空间的位置,但是要自己实现这一点并不是特别困难。这是叠加遵循3D位置的UIView
的一般方法:
ARAnchor
。ARSCNView
一起使用,则使用renderer(_:didUpdate:for:)
或renderer(_:updateAtTime:)
;如果要构建自己的渲染器,则使用session(_:didUpdate:)
)该锚的当前3D位置。ARSCNView
projectPoint
,ARCamera
projectPoint
)以获取该3D位置在屏幕上出现的2D点。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帖子以获取更多详细信息。