我有这个只适用于横向的应用程序。
我在场景包上有一个对象。该对象位于特定位置,由以下方式指定:
SCNNode * buttonRef = [scene.rootNode childNodeWithName:@"buttonRef" recursively:YES];
SCNVector3 buttonRefPosition = [buttonRef position];
现在我需要将其转换SCNVector3
为mainView
2D 坐标,其中
mainView = (SCNView *)self.view;
场景使用正交相机,所以没有透视。摄像头是默认摄像头。没有旋转,没有平移。相机的 orthographicScale 为 5.4。
我该如何转换?
我在 SO 上找到了关于反向问题的其他答案,即从 CGPoint 转换为 SCNVector3,但对我来说,如何从 SCNVector3 转换为 CGPoint 听起来并不明显。
如果 SCNView 是 UIView 的子类,则 (0,0) 是左上角,而在 iPhone 6 横向的情况下,(667, 375) 是右下角。
我的这个按钮几乎在高度的右侧和中间。就 UIKit 而言,我会说这个按钮位于 (600, 187) 但是当我这样做时:
SCNNode * buttonRef = [scene.rootNode childNodeWithName:@"buttonRef" recursively:YES];
SCNVector3 buttonRefPosition = [buttonRef position];
SCNVector3 projectedPoint = [mainView projectPoint: buttonRefPosition];
我得到 projectPoint 等于 (7.8, 375, 0) (?)
当我使用 UIKit 将 10x10 视图添加到坐标 (7.8, 375) 时,我会在左下角看到一个视图!
就像我说的那样,该应用程序仅在横向运行,但这些坐标系都一团糟。