我正在编写一个使用ARSCNView hitTest
函数的ARKit应用。该应用程序还将捕获的图像发送到服务器进行一些分析。
我注意到我什么时候做:
let viewportSize = sceneView.snapshot().size
let viewSize = sceneView.bounds.size
然后第一个是第二个的两倍。
问题是:
答案 0 :(得分:4)
让我们探讨一下iPhone 7的一些重要显示特征:
由于具有相同屏幕尺寸的移动设备可以具有非常不同的分辨率,因此开发人员在创建3D场景或适合移动设备的网页时经常使用 viewports
。 在VR和AR领域:分辨率越低–渲染器越快,而CPU / GPU负担就越少。创建视口的想法主要用于移动设备。 在macOS中,Screen Resolution
和Viewport Resolution
相同。
在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的宽高比:
示意图!
视口大小及其在移动设备中的实际布局:
真实描绘!
其他参考: Phone X
的ViewPort分辨率小 9倍 ( 375 x 812 ),而不是屏幕分辨率( 1125 x 2436 )。
在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!