我在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:
以上是内存溢出为你收集整理的ios – 如何将SCNVector3位置转换为CGPoint SCNView坐标?全部内容,希望文章能够帮你解决ios – 如何将SCNVector3位置转换为CGPoint SCNView坐标?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)