Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在ARKit中,屏幕空间是什么意思?_Ios_Augmented Reality_Arkit_Wwdc - Fatal编程技术网

Ios 在ARKit中,屏幕空间是什么意思?

Ios 在ARKit中,屏幕空间是什么意思?,ios,augmented-reality,arkit,wwdc,Ios,Augmented Reality,Arkit,Wwdc,当我看了805课时的视频,创造了很棒的AR体验,他们提到在AR中显示文本时使用屏幕空间文本。他们使用了他们的测量应用程序的例子,效果非常好 我想实现类似的功能。但是,我无法理解 默认情况下,由于iPhone的运动传感器,ARKit中的世界(或绝对)坐标系。ARKit中的世界坐标(在3D空间中)是固定的,iPhone的前后摄像头在这些坐标内移动。因此,如果您需要相对于iPhone的当前位置进行任何操作,您首先需要转换到相机空间(也在3D空间中) 但是屏幕空间(又称投影空间)是iPhone屏幕的2D

当我看了805课时的视频,创造了很棒的AR体验,他们提到在AR中显示文本时使用屏幕空间文本。他们使用了他们的测量应用程序的例子,效果非常好


我想实现类似的功能。但是,我无法理解

默认情况下,由于iPhone的运动传感器,ARKit中的世界(或绝对)坐标系。ARKit中的
世界坐标
(在3D空间中)是固定的,iPhone的前后摄像头在这些坐标内移动。因此,如果您需要相对于iPhone的当前位置进行任何操作,您首先需要转换到
相机空间
(也在3D空间中)

但是
屏幕空间
(又称
投影空间
)是iPhone屏幕的2D空间。在显示器上的
屏幕空间
中,一个小的3D对象(例如离相机100米)可能会被视为一个红色像素

我相信WWDC'18演示者告诉我们,在iPhone屏幕上文本的强大可视性背景下,屏幕空间是如何的。就这样


阅读这篇优秀的文章,了解更多详细信息。

屏幕空间是显示器的二维像素坐标系。在这里,您通常会在屏幕空间中布置UIKit小部件等

屏幕空间的替代是一个3D坐标空间,它涉及到3D世界跟踪ARKIT或3D渲染引擎,用于在AR中显示虚拟3D内容(在这种情况下,有多个3D空间需要考虑,如“绝对的”世界空间相对于相机的相对定位)。 正如WWDC18演讲中提到的,屏幕空间是一种很好的方式,可以以一种可读的方式显示本质上是2D(如文本)的内容,而不管与内容相关联的真实世界功能的距离或方向如何。(如果你把这个文本标签放在世界空间中,当你远离它时,它会变得很小而且不可读。)

ARKit并没有提供任何让2D屏幕空间内容跟随3D世界空间位置的自动方式,但让自己实现这一点并不特别困难。下面是一个覆盖
UIView
s的常规方法,它遵循3D位置:

  • 在希望屏幕空间内容显示的真实位置添加一个
    ARAnchor
  • 使用每帧回调(或者如果您正在将SceneKit与
    ARSCNView
    一起使用,如果您正在构建自己的渲染器),以获取该锚点的当前三维位置
  • 投影三维位置(
    ARSCNView
    ARCamera
    )以获得屏幕上显示该三维位置的二维点
  • ui视图的位置设置为与该点匹配

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

    投影3D位置(ARSCNView projectPoint,ARCamera projectPoint)获取屏幕上显示该三维位置的二维点。还有Z。我需要做什么,我也不能理解XZ平面和XY平面。由ARKIt检测到的地板是XZ平面正确!!还有一点是ARSCNView projectPoint,它根据屏幕方向给出位置。就像我把手机向右倾斜30度。使用UIBezierPath时,投影点提供旋转的形状。有什么帮助吗?