我有一个AR项目,其中显示了多个SCNPlane
对象。为了检查SCNPlane
对象是否重叠,我通过将SCNPlane
对象投影到视图中的CGRect
来计算Intersection-Over-Area,然后计算该对象的Intersection-Over-Area投射的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 -每个帧上的区域。当我旋转相机时,它表明两个CGRect没有重叠,即使它们显然是重叠的。
我需要添加什么以便基础CGRect“保持原位”并正确显示SCNPlane在图像平面上的投影?