所以,我正在使用ARKit在会话中显示功能点。我能够获取当前帧,然后是rawFeaturePoints并将几何体放置在世界空间中,以便用户可以在屏幕上看到它们。这很有效。
在应用程序中,我在屏幕上有一个象限。我的目标是在屏幕坐标中显示投影将落在屏幕上的2D象限内的特征点。为此,我尝试了这个:
然后我打电话给ARSCNView:
public func projectPoint(_ point:SCNVector3) - > SCNVector3
这种方法确实给了我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虽然让事情看起来更好,但它违背了文档。否?