ios - 如何获取 ARKit 特征点的 UIKit 坐标?

标签 ios swift scenekit arkit

我有一个 ARSCNView,我正在跟踪场景中的特征点。如何从特征点的 3D 世界坐标中获取特征点的 2D 坐标(如屏幕中该点的坐标)?

(本质上与 sceneView.hitTest 相反)

最佳答案

将点从 3D 空间(通常是相机或世界空间)转换到 2D View (像素)空间称为该点投影。 (因为它涉及 projection transform 定义如何展平第三个维度。)

ARKit 和 SceneKit 都提供了投影点的方法(以及非投影点,即反向变换,需要额外的输入来推断第三维)。

由于您使用的是 ARSCNView,因此您只需使用 projectPoint方法。 (它继承自父类(super class) SCNView 并在 SCNSceneRenderer 协议(protocol)中定义,但仍然适用于 AR,因为 ARKit 世界空间与 SceneKit world/scene/rootNode 空间相同。)请注意,对于该方法,您需要在 float3SCNVector3 之间来回转换。

另请注意,返回的“2D”点仍然是 3D 向量 - xy 坐标是屏幕像素(好吧,“点”如 UIKit 布局单元中所示) ),第三个是相对深度值。只需从前两个坐标创建一个 CGPoint 即可与其他 UIKit API 一起使用。

顺便说一句,如果您在没有 SceneKit 的情况下使用 ARKit,还有一个 projectPoint ARCamera 上的方法。

关于ios - 如何获取 ARKit 特征点的 UIKit 坐标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51330453/

相关文章:

ios - UICollectionView 边到边布局

swift - scnScene.write 未将场景写入 .scn 文件

ios - 想要在 scenekit ios 中添加图像作为纹理

ios - 为 UIScrollView 禁用弹跳时,滚动指示器卡住

ios - 检测您所在的 GPS 环境的算法

ios - Xamarin 图像集不导入

swift - 在 Foundation 中找不到 FileManager Swift 类,它在哪里?

ios - 带有缓存策略的 UIWebView 奇怪行为

php - 在Swift 4中从PHP解析JSON

swift - 如何为 AR Quick Look 关闭 "USDZ"文件中的联系人阴影?