Как мне повернуть узел SCNNode, чтобы посмотреть на другой узел, сохраняя при этом его уровень крена и шага с камерой?

Я использую ARKit, чтобы направить людей в положение в физическом мире, используя стрелку, прикрепленную к узлу камеры. Применение lookAtConstraint к стрелке с целью узла в месте, которое я хочу, почти делает то, что мне нужно. Однако мне нужно остановить движение стрелки влево и вправо и наклон вверх и вниз. Пример пользовательского интерфейса

1 ответ

Решение

Вы пробовали установку isGimbalLockEnabled в true ограничить вращение рулона? В документации Apple упоминает: "Например, когда вы заставляете камеру следовать за движущимся объектом, установка этого свойства в true гарантирует, что горизонт остается ровным с точки зрения камеры".

Если это по-прежнему не то, что вы ищете, вам может понадобиться написать собственное ограничение, используя функцию класса SCNTransformConstraint.orientationConstraint, Вы можете написать ограничение как вторичное ограничение, которое в основном ограничивает повороты по осям X и Z, или вы можете написать собственное ограничение просмотра с большим количеством ограничений (в этом случае я бы рекомендовал посмотреть на simd.look(at:) функции, а затем ограничивая оси ориентации оттуда).

Это должно помочь вам в этом, или я могу добавить код позже, если он не работает. Удачи!

Другие вопросы по тегам