Разница между worldTransform и localTransform в ARKit / ARHitTestResult - PullRequest
1 голос
/ 29 мая 2019

Я пытаюсь поместить объект в AR в определенное место после выполнения проверки, но иногда он неправильно выравнивается / поворачивается с помощью worldTransform. Я пытаюсь применить свойство localTransform к worldTransform, так как кажется, что это гарантирует, что независимо от того, какая особенность выбрана, я могу перевести объект в нужное место.

Я пытался добавить / вычесть матрицу localTransform simd_4 в матрицу worldTransform, но не похоже, что она действительно делает что-то значимое.

Вот как я на самом деле применяю преобразование:

world.columns.3[0] += local.columns.3[0]
world.columns.3[1] += local.columns.3[1]
world.columns.3[2] += local.columns.3[2]
world.columns.3.w  = local.columns.3.w

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

1 Ответ

0 голосов
/ 08 июня 2019

Разница между мировыми и локальными преобразованиями заключается в следующем: - мировое преобразование - это позиция модели относительно положения сцены - локальное преобразование - это положение модели относительно позиции ее родительского узла

В вашем случае, я подозреваю, что вы недобавление узла непосредственно в качестве дочернего узла корневого узла, поскольку rootNode является узлом (0,0,0) в сцене, и любая из его дочерних матриц преобразования должна быть одинаковой.

В вашей логике я предполагаю, что вы проецируете касание, которое не так точно, как установка бесконечной плоскости, как SCNFloor, а затем обнаруживает касания на бесконечной плоскости.Это даст вам гораздо более точное местоположение при попытке проецирования касания в ARSCN.

Я бы порекомендовал взглянуть на ARKit-SmartHitTest от Maxx Frazer, так как он реализует эту функцию и его код открыт.источник.https://github.com/maxxfrazer/ARKit-SmartHitTest/blob/master/SmartHitTest/SmartHitTest.swift

...