ARKit Overlapping CGRect - Расхождение при вращении устройства - PullRequest
0 голосов
/ 11 февраля 2019

У меня есть проект AR, в котором я отображаю несколько SCNPlane объектов.Чтобы проверить, перекрываются ли объекты SCNPlane, я вычисляю площадь пересечения, проецируя объекты SCNPlane на CGRect в виде, а затем вычисляю площадь пересечения проецируемых объектов CGRect.Я также визуализирую проецируемые CGRect объекты, чтобы убедиться, что проекции выполнены правильно.Вот код, который добавляет прямоугольники в UIView:

let rectView = UIView(frame: rect)
rectView.center = rectCenter
rectView.alpha = 0.3
rectView.backgroundColor = UIColor.blue

Я заметил странное поведение - а именно, когда я поворачиваю устройство, проецируемый CGRect также вращается, неточно показывая проецируемые прямоугольники.Я попробовал следующий трюк, чтобы заставить UIView не вращаться - или, что более важно, следить за вращением камеры вокруг оси z:

let rotation = camera.eulerAngles.z
let rectTransform = CGAffineTransform(rotationAngle: CGFloat(rotation + Float.pi/2))

let rectView = UIView(frame: rect)
rectView.center = rectCenter
rectView.alpha = 0.3
rectView.backgroundColor = UIColor.blue

rectView.transform = rectTransform

Теперь, UIView, который я визуализирую, показывает, что SCNPlaneпроецируются относительно хорошо, однако кажется, что базовый CGRect все еще вращается - я могу сказать это, расположив два SCNPlane внахлест, а затем вызвав Intersection-Over-Area в каждом кадре.Когда я поворачиваю камеру, это показывает, что два CGRect не перекрываются, даже если они явно.

Что мне нужно добавить, чтобы базовый CGRect "остался на месте" и правильно отображал проекцию SCNPlane на плоскость изображения?

...