代码之家  ›  专栏  ›  技术社区  ›  Tob

如何获得arkit特征点的uikit坐标?

  •  1
  • Tob  · 技术社区  · 8 年前

    我有一个arscnview,我正在跟踪场景中的特征点。如何从要素点的三维世界坐标中获取要素点的二维坐标(如屏幕上该点的坐标)?

    (基本上与sceneview.hittest相反)

    1 回复  |  直到 8 年前
        1
  •  3
  •   rickster    8 年前

    将点从三维空间(通常是相机或世界空间)转换为二维视图(像素)空间称为 突出 这一点。(因为它涉及 projection transform 它定义了如何展平第三维。)

    arkit和scenekit都提供了投影点的方法(和未投影点,即需要额外输入如何外推第三维度的反向转换)。

    因为你和 ARSCNView ,您只需使用 projectPoint 方法。(从超类继承而来 SCNView 并在 SCNSceneRenderer 协议,但仍然适用于ar,因为arkit世界空间与scenekit世界/场景/根节点空间相同。)注意,您需要在 float3 SCNVector3 对于那个方法。

    还要注意,返回的“2d”点仍然是3d矢量 x y 坐标是屏幕像素(如uikit布局单位中的“点”),第三个是相对深度值。做一个 CGPoint 在前两个坐标中,您可以使用其他uikit api。

    顺便说一句,如果你在没有scenekit的情况下使用arkit,还有 projectPoint 方法 ARCamera .