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

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

概述我有这个应用程序,只适用于景观. 我在scenekit上有一个对象.该对象位于某个位置,由下式指定: SCNNode * buttonRef = [scene.rootNode childNodeWithName:@"buttonRef" recursively:YES]; SCNVector3 buttonRefPosition = [buttonRef position]; 现在我需要将SC 我有这个应用程序,只适用于景观.

我在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坐标?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1209432.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存