ARKit:将ARPointCloud中的特征点投影到图像空间并检查它是否包含在屏幕上的CGRect中?

时间:2017-10-25 16:47:25

标签: scenekit arkit

所以,我正在使用ARKit在会话中显示功能点。我能够获取当前帧,然后是rawFeaturePoints并将几何体放置在世界空间中,以便用户可以在屏幕上看到它们。这很有效。

在应用程序中,我在屏幕上有一个象限。我的目标是在屏幕坐标中显示投影将落在屏幕上的2D象限内的特征点。为此,我尝试了这个:

  1. 将要素点作为vector_float3
  2. 的数组
  3. 对于每个点我然后得到一个SCNVector3将Z分量设置为0(接近平面)
  4. 然后我打电话给ARSCNView:

    public func projectPoint(_ point:SCNVector3) - > SCNVector3

  5. 这种方法确实给了我2D点,但是,根据相机的位置,它们似乎已经过了。

    那么,因为在ARKit中相机一直在移动,我是否需要考虑到这一点来实现我解释的内容?

    编辑: 关于翻转从相机上的projectPoint调用中检索到的CGPoint的Y:

    /**
     Project a 3D point in world coordinate system into 2D viewport space.
    
     @param point 3D point in world coordinate system.
     @param orientation Viewport orientation.
     @param viewportSize Viewport (or image) size.
     @return 2D point in viewport coordinate system with origin at top-left.
     */
    open func projectPoint(_ point: vector_float3, orientation: UIInterfaceOrientation, viewportSize: CGSize) -> CGPoint
    
    雷米桑提到翻过Y.我试过了,它似乎确实奏效了。他正在做的和我正在做的事情之间的一个区别是我没有使用SKScene,但我使用的是SCNScene。看一下它说的文档:

      

    ...将指定点投影到2D像素坐标空间中   其起源位于左上角......

    所以,让我失望的是,如果我不翻转Y,似乎它并没有真正正常工作。 (我会尝试发布图片以显示我的意思)。但是,如果翻转Y虽然让事情看起来更好,但它违背了文档。否?

0 个答案:

没有答案