У меня есть проект 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 на плоскость изображения?