ARKit – 视口大小与实际屏幕分辨率

Ant*_*ton 1 augmented-reality scenekit swift arkit realitykit

我正在编写一个使用 ARSCNViewhitTest函数的 ARKit 应用程序。该应用程序还将捕获的图像发送到服务器进行一些分析。

当我这样做时我注意到:

let viewportSize = sceneView.snapshot().size
let viewSize = sceneView.bounds.size 
Run Code Online (Sandbox Code Playgroud)

那么第一个是第二个的两倍。

问题是:

  • 1.为什么会有差异?
  • 2.hitTest中使用什么“大小”(例如坐标)?

ARG*_*Geo 8

为什么会有差异?

\n

让我们探讨一下 iPhone 7 的一些重要显示特性

\n
    \n
  • 分辨率为 750(宽)x 1,334(高)像素(16 : 9)
  • \n
  • 视口分辨率为 375(宽)x 667(高)像素(16 : 9)
  • \n
\n

由于具有相同屏幕尺寸的移动设备可能具有截然不同的分辨率,因此开发人员viewports在创建 3D 场景或适合移动设备的网页时经常使用。在VR和AR领域:分辨率越低\xe2\x80\x93,渲染器速度越快,CPU/GPU负担也大大减轻。创建视口的思想主要用于移动设备。在 macOS 中Screen ResolutionViewport Resolution是相同的

\n

在此输入图像描述

\n

在 iPhone 以及其他移动设备中,Viewport分辨率是按比例缩小的版本(通常每个轴小 2 或 3 倍),允许在不同设备上更一致地查看 3D 场景视口或网站(非常重要!)能源消耗更少。视口通常比分辨率尺寸更标准化且更小。

\n

快照几乎总是反映真实的屏幕分辨率

\n
let screenSize = sceneView.snapshot().size\n\n/*   750 x 1,334    */\n/*   iPhone 7 rez   */\n
Run Code Online (Sandbox Code Playgroud)\n

SceneView 大小通常反映标准化的屏幕分辨率(比规格分辨率小 4 倍):

\n
let viewportSize = sceneView.bounds.size \n\n/*   375 x 667     */\n/*   ViewPort rez  */\n
Run Code Online (Sandbox Code Playgroud)\n

iPhone 7 中 Viewport Rez (1/4) 与 Screen Rez 的长宽比:

\n

示意图!

\n

在此输入图像描述

\n

视口大小及其在移动设备中的实际布局:

\n

真实描绘!

\n

在此输入图像描述

\n

附加参考:Phone XViewPort 分辨率( 375 x 812 ) 比屏幕分辨率 ( 1125 x 2436 )小九倍

\n


\n

命中测试中使用什么坐标?

\n

在命中测试和光线投射中使用视口坐标

\n

让我们使用命中测试方法 \xe2\x80\x93 进行 3 次点击,第一次点击左上角(靠近x=0y=0),第二次点击屏幕中心,第三次点击右下角(靠近x=667y=375):

\n
let point: CGPoint = gestureRecognize.location(in: sceneView)\n\nprint(point)\n
Run Code Online (Sandbox Code Playgroud)\n

在此输入图像描述

\n

iPhone 7 视口的坐标打印在控制台中:

\n

在此输入图像描述

\n
Quod Erat Demonstrandum!\n
Run Code Online (Sandbox Code Playgroud)\n