ARKit - размер области просмотра и реальное разрешение экрана - PullRequest
0 голосов
/ 18 марта 2020

Я пишу приложение ARKit, которое использует функцию ARSCNView hitTest. Также приложение отправляет захваченные изображения на сервер для некоторого анализа.

Я замечаю, когда делаю:

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

, тогда первое из них в два раза больше второго.

Вопросы:

  • 1. Почему есть разница?
  • 2. Какой «размер» (например, координаты) используется в hitTest?

1 Ответ

2 голосов
/ 21 марта 2020

Почему есть разница?

Давайте рассмотрим некоторые важные характеристики дисплея вашего iPhone 7 :

  • с разрешением 750 (Ш) x 1334 (В) пикселей (16: 9)
  • Результирующая область 375 (Ш) х 667 (В) пикселей (16: 9)

Поскольку мобильные устройства с одинаковым размером экрана могут иметь очень разные разрешения, разработчики часто используют viewports при создании 3D-сцен или веб-страниц, удобных для мобильных устройств. В полях VR и AR: чем ниже разрешение, тем быстрее рендерер, и нагрузка на CPU / GPU значительно меньше . Идея создания видовых экранов в основном используется для мобильных устройств. В macOS Screen Resolution и Viewport Resolution идентичны .

enter image description here

В iPhone, а также в других мобильных устройств, Viewport - это уменьшенная версия (обычно в 2 или 3 раза меньше по каждой оси) разрешения, которая позволяет просматривать окна 3D-сцен или веб-сайты более согласованно на разных устройствах и (очень важно!) с меньшим потреблением энергии . Окна просмотра часто более стандартизированы и меньше размеров разрешения.

Снимки почти всегда отражают реальных разрешений экрана :

let viewportSize = sceneView.snapshot().size

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

Размер SceneView часто отражает стандартизированных разрешение экрана (в 4 раза меньше, чем у спецификации):

let viewSize = sceneView.bounds.size 

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

Соотношение размеров экрана (1/4) к Screen Rez в iPhone 7:

Схемы c изображение!

enter image description here

Размер области просмотра и ее реальное расположение в мобильном устройстве:

Реальное изображение!

enter image description here

Дополнительная справка: Phone X имеет разрешение ViewPort в девять раз меньше ( 375 x 812 ), чем разрешение экрана ( 1125 x 2436 ).

enter image description here

Какие координаты используются при проверке нажатия ?

В Hit-Testing и Ray-Casting используются координаты ViewPort .

Давайте сделаем 3 касания, используя метод проверки попадания - первый касание в Up в левом углу (около x=0 и y=0), второе нажатие в центре экрана и третье нажатие в нижнем правом углу (около x=667 и y=375):

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

print(point)

enter image description here

Координаты iPhone 7 Видовой экран печатается в консоли:

enter image description here

Quod Erat Demonstrandum!
...