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

时间:2020-03-17 22:44:55

标签: swift augmented-reality scenekit arkit realitykit

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

我注意到我什么时候做:

let viewportSize = sceneView.snapshot().size
let viewSize = sceneView.bounds.size 

然后第一个是第二个的两倍。

问题是:

  • 1。为什么有区别?
  • 2。hitTest使用什么“大小”(例如坐标)?

1 个答案:

答案 0 :(得分:4)

为什么有区别?

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

  • 分辨率为750(W)x 1,334(H)像素(16:9)
  • 375(W)x 667(H)像素的视口rez (16:9)

由于具有相同屏幕尺寸的移动设备可以具有非常不同的分辨率,因此开发人员在创建3D场景或适合移动设备的网页时经常使用 viewports 在VR和AR领域:分辨率越低–渲染器越快,而CPU / GPU负担就越少。创建视口的想法主要用于移动设备。 在macOS中,Screen ResolutionViewport Resolution相同

enter image description here

在iPhone以及其他移动设备中, Viewport 是按比例缩小的版本(通常在每个轴上缩小2或3倍),可实现3D场景视口或网站可以在不同设备上更一致地进行浏览,并且(非常重要!)能耗更低。视口通常比分辨率尺寸更标准化且更小。

快照几乎总是反映出实际屏幕分辨率

let viewportSize = sceneView.snapshot().size

/*   750 x 1,334    */
/*   iPhone 7 rez   */

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

let viewSize = sceneView.bounds.size 

/*   375 x 667     */
/*   ViewPort rez  */

iPhone 7中的视口Rez(1/4)与屏幕Rez的宽高比:

示意图!

enter image description here

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

真实描绘!

enter image description here

其他参考: Phone X 的ViewPort分辨率小 9倍 375 x 812 ),而不是屏幕分辨率( 1125 x 2436 )。


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

在ViewPort的命中测试和射线投射坐标中使用

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

let point: CGPoint = gestureRecognize.location(in: sceneView)

print(point)

enter image description here

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

enter image description here

Quod Erat Demonstrandum!
相关问题