我有一个ARSCNView,我正在跟踪场景中的特征点。如何从特征点的3D世界坐标获得特征点的2D坐标(如屏幕中该点的坐标)?
(本质上与sceneView.hitTest相反)
发布于 2018-07-14 03:13:25
将一个点从3D空间(通常是相机或世界空间)转换到2D视图(像素)空间称为投影该点。(因为它涉及到定义如何展平第三个维度的projection transform。)
ARKit和SceneKit都提供了投影点的方法(以及取消投影点的方法,这是一种需要额外输入如何外推第三维的反向转换)。
因为您使用的是ARSCNView
,所以可以只使用projectPoint
方法。(这是从超类SCNView
继承并在SCNSceneRenderer
协议中定义的,但仍然适用于AR,因为ARKit世界空间与SceneKit世界/场景/根节点空间相同。)注意:对于该方法,您需要在float3
和SCNVector3
之间来回转换。
还要注意,返回的"2D“点仍然是一个3D向量-- x
和y
坐标是屏幕像素( UIKit布局单位中的”点“),第三个是相对深度值。只需从前两个坐标创建一个CGPoint
,就可以与其他UIKit应用程序接口一起使用。
顺便说一句,如果你使用的是没有SceneKit的ARKit,在ARCamera
上也有一个projectPoint
方法。
https://stackoverflow.com/questions/51330453
复制相似问题