当前位置 : 主页 > 手机开发 > ios >

ios – 如何将SCNVector3位置转换为CGPoint SCNView坐标?

来源:互联网 收集:自由互联 发布时间:2021-06-11
我有这个应用程序,只适用于景观. 我在scenekit上有一个对象.该对象位于某个位置,由下式指定: SCNNode * buttonRef = [scene.rootNode childNodeWithName:@"buttonRef" recursively:YES]; SCNVector3 buttonRefPosition
我有这个应用程序,只适用于景观.

我在scenekit上有一个对象.该对象位于某个位置,由下式指定:

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将10×10视图添加到坐标(7.8,375)时,我会在左下方看到一个视图!

就像我说应用程序仅在横向操作,但这些坐标系统都是混乱的.

将模型空间点转换为屏幕空间点称为投影(因为它将相机的投影变换应用于从3D空间映射到2D空间).渲染器(通过GPU)每帧执行很多次,以将场景中的点数放到屏幕上.

当您需要自己动手时,还有一种方便的方法:projectPoint:

网友评论