База курсора CoreLocation на задней камере (дополненная реальность)

Я хотел бы создать представление дополненной реальности, которое будет указывать объект в направлении. Тем не менее, заголовок CoreLocation не работает должным образом, когда вы обращаете камеру вверх (например, на вершину 20-этажного здания, когда вы находитесь на первом этаже).

Это дает противоположное направление (вероятно, направление, которое указывает на верхней части телефона).

Я попробовал несколько методов, чтобы заставить его работать в направлении, указанном камерой, например:

1, +180 градусов, когда ориентация устройства> 45 градусов (не достаточно точно, внезапно направление отклоняется на 10 ~ 20 градусов)

2, попытался рассчитать, используя CMMotionManager с формулой из учебника ниже.http://www.loveelectronics.co.uk/Tutorials/13/tilt-compensated-compass-arduino-tutorial.

3, попытался смоделировать логику с Android с помощью ios deviceMotion.magnField и deviceMotion.gravity.

4, используйте матрицу вращения (какой-то другой пост в переполнении стека, но не точный)

    double heading = M_PI + atan2(self.altitudeData.rotationMatrix.m22, self.altitudeData.rotationMatrix.m12);
    heading = heading*180/M_PI;

У меня заканчиваются идеи, что еще я могу попытаться сделать правильно. Я знаю, что есть некоторые приложения (некоторые, которые могут видеть солнце и звезду), которые делают это правильно.

Ответы на вопрос(2)

Ваш ответ на вопрос