ARKit – 视口大小与实际屏幕分辨率
ARKit – Viewport Size vs Real Screen Resolution
我正在编写一个使用 ARSCNView hitTest
函数的 ARKit 应用程序。该应用程序还将捕获的图像发送到服务器进行一些分析。
我注意到了:
let viewportSize = sceneView.snapshot().size
let viewSize = sceneView.bounds.size
那么第一个是第二个的两倍
问题是:
- 1.Why有区别吗?
- 2.What "size"(例如坐标)在hitTest中使用?
为什么会有差异?
让我们探讨一下 iPhone7:
的一些重要显示特征
- 750 (W) x 1,334 (H) 像素的分辨率 (16 : 9)
- 375 (W) x 667 (H) 像素的视口分辨率 (16 : 9)
由于具有相同屏幕尺寸的移动设备可能具有非常不同的分辨率,因此开发人员在创建 3D 场景或适合移动设备的网页时经常使用 viewports
。 在 VR 和 AR 领域:分辨率越低 – 渲染器越快,CPU/GPU 负担大大减轻。创建视口的想法主要用于移动设备。 在 macOS 中 Screen Resolution
和 Viewport Resolution
相同。
在iPhone以及其他移动设备中,Viewport
是按比例缩小的版本(每个轴通常缩小2或3倍) 的分辨率允许在不同设备上更一致地查看 3D 场景视口或网站,并且(非常重要!)消耗更少的能源。视口通常比分辨率尺寸更标准化且更小。
快照几乎总是反映真实屏幕分辨率:
let screenSize = sceneView.snapshot().size
/* 750 x 1,334 */
/* iPhone 7 rez */
SceneView 大小通常反映标准化屏幕分辨率(比规格 rez 小 4 倍):
let viewportSize = sceneView.bounds.size
/* 375 x 667 */
/* ViewPort rez */
Viewport Rez (1/4) to Screen Rez 纵横比 iPhone 7:
示意图!
视口大小及其在移动设备中的实际布局:
真实写照!
附加参考:Phone X
的 ViewPort 分辨率 9 倍 更小(375 x 812) 比屏幕分辨率 (1125 x 2436).
命中测试使用什么坐标?
在 Hit-Testing 和 Ray-Casting 中使用 ViewPort 坐标。
让我们使用命中测试方法进行 3 次点击 - 第一次点击左上角(靠近 x=0
和 y=0
),第二次点击屏幕中央,第三次点击左下角右角(靠近 x=667
和 y=375
):
let point: CGPoint = gestureRecognize.location(in: sceneView)
print(point)
坐标 iPhone 7 Viewport 打印在控制台中:
Quod Erat Demonstrandum!
我正在编写一个使用 ARSCNView hitTest
函数的 ARKit 应用程序。该应用程序还将捕获的图像发送到服务器进行一些分析。
我注意到了:
let viewportSize = sceneView.snapshot().size
let viewSize = sceneView.bounds.size
那么第一个是第二个的两倍
问题是:
- 1.Why有区别吗?
- 2.What "size"(例如坐标)在hitTest中使用?
为什么会有差异?
让我们探讨一下 iPhone7:
的一些重要显示特征- 750 (W) x 1,334 (H) 像素的分辨率 (16 : 9)
- 375 (W) x 667 (H) 像素的视口分辨率 (16 : 9)
由于具有相同屏幕尺寸的移动设备可能具有非常不同的分辨率,因此开发人员在创建 3D 场景或适合移动设备的网页时经常使用 viewports
。 在 VR 和 AR 领域:分辨率越低 – 渲染器越快,CPU/GPU 负担大大减轻。创建视口的想法主要用于移动设备。 在 macOS 中 Screen Resolution
和 Viewport Resolution
相同。
在iPhone以及其他移动设备中,Viewport
是按比例缩小的版本(每个轴通常缩小2或3倍) 的分辨率允许在不同设备上更一致地查看 3D 场景视口或网站,并且(非常重要!)消耗更少的能源。视口通常比分辨率尺寸更标准化且更小。
快照几乎总是反映真实屏幕分辨率:
let screenSize = sceneView.snapshot().size
/* 750 x 1,334 */
/* iPhone 7 rez */
SceneView 大小通常反映标准化屏幕分辨率(比规格 rez 小 4 倍):
let viewportSize = sceneView.bounds.size
/* 375 x 667 */
/* ViewPort rez */
Viewport Rez (1/4) to Screen Rez 纵横比 iPhone 7:
示意图!
视口大小及其在移动设备中的实际布局:
真实写照!
附加参考:Phone X
的 ViewPort 分辨率 9 倍 更小(375 x 812) 比屏幕分辨率 (1125 x 2436).
命中测试使用什么坐标?
在 Hit-Testing 和 Ray-Casting 中使用 ViewPort 坐标。
让我们使用命中测试方法进行 3 次点击 - 第一次点击左上角(靠近 x=0
和 y=0
),第二次点击屏幕中央,第三次点击左下角右角(靠近 x=667
和 y=375
):
let point: CGPoint = gestureRecognize.location(in: sceneView)
print(point)
坐标 iPhone 7 Viewport 打印在控制台中:
Quod Erat Demonstrandum!