ARKit: нанести узел на определенный пиксель на определенном расстоянии Z от камеры - PullRequest
0 голосов
/ 25 июня 2018

enter image description here

Ссылаясь на изображение выше. У меня есть красный узел в центре экрана с расстоянием 1,0 единицы (1 метр) [см. IPhone Portrait Top View]

Я делаю снимок экрана экрана iPhone, и получаемое изображение имеет размер 750 x 1334 пикселя [См. Портретный вид спереди iPhone]

sceneView.snapshot()

То, что я хочу сделать, это поместить 4 узла Red Square, расположенных по четырем сторонам экрана iPhone относительно Красного круга (в мертвой точке экрана). Я делаю это, чтобы отметить, где я сделал снимок. То, что я хочу знать, - как я могу построить узел блока точно в определенной точке x, y с учетом расстояния z. (Значение Z не является фиксированным, я просто использовал 1,0 в качестве примера сценария) .. Я хочу построить графики (0,0), (750,0), (0, 1334) и (750, 1334) z 1,0 и при условии, что я на штативе, на четырех сторонах экрана моего iPhone будут отображаться узлы.

Я очень ужасен в математике, и мне сложно решить эту проблему наедине с моими нынешними математическими навыками. Кто-нибудь может помочь? Пожалуйста?

1 Ответ

0 голосов
/ 26 июня 2018

Поскольку вам нужны узлы ARnchor (чтобы отметить, где был сделан снимок), использование информации с камеры в режиме реального времени вместо снимка будет, вероятно, проще.В частности, из-за того, что пиксели в 2D-изображении имеют ссылки слева направо и сверху вниз (с координатами «0,0», расположенными в верхнем левом углу) ... и мы знаем, что на узлы AR ссылаются в 3D-координатах с помощьюцентр локального узла в виде 0,0,0 координат.

У меня еще нет кода для тестирования, но я думаю, что следующие свойства должны помочь:

    let pPoint  = sceneView.projectPoint(self.centerBall.position)
    let fieldW  = sceneView.session.currentFrame?.camera.imageResolution.width
    let fieldH  = sceneView.session.currentFrame?.camera.imageResolution.height

"pPoint""должен вернуть 2D-координаты, соответствующие (0,0,0) 3D-координатам" centerBall ", оттуда нужно просто сложить или вычесть вычисления, чтобы получить все 4 угла в 2D

Наконец, передав 2D-координатыкаждого угла метода "unprojectPoint ( :)" должен предоставлять трехмерные "мировые" координаты, которые можно преобразовать в координаты "centerBall" с помощью "convertPosition ( position: SCNVector3, from node: SCNNode?") "method

Кажется интересным, поэтому попробую закодировать это до выходных

В конце я подозреваю, что узлы ARanchor могут быть не на 100% стабильными

...