ARKit:在屏幕上查找SCNNode的坐标

Neb*_*ula 5 ios swift scnnode arkit arscnview

我有一个简单的Swift ARKit设置,其中有一个带有3D对象的SCNNode,该对象在ARSCNView中可见。

我想确定该对象在ARSCNView上的2D坐标。我的意思是指将对象绘制到屏幕上时的x和y坐标。

我提供了一个草图来说明我的意思: 草图

有没有办法获得这些坐标,或者至少是一个近似值?我需要这样做,以便对相机框架进行进一步的处理。基本上,我对对象在屏幕上占据的区域感兴趣。

Axe*_*min 7

您可以使用SCNSceneRenderer projectPoint:point

将一个点从场景的 3D 世界坐标系投影到渲染器的 2D 像素坐标系。

let node:SCNNode = // Your node
let nodeWorldPosition = node.position
let nodePositionOnScreen = renderer.projectPoint(nodeWorldPosition)
let x = nodePositionOnScreen.x
let y = nodePositionOnScreen.y
Run Code Online (Sandbox Code Playgroud)

注意:从近(远)剪裁平面投影的点将具有 0(分别为 1)的 az 分量。


相同的方法可以用于ARAnchor

let anchor:ARAnchor = // ...
let anchorWorldPosition = SCNVector3(anchor.transform.columns.3)
let anchorPositionOnScreen = renderer.projectPoint(anchorWorldPosition)
let x = anchorPositionOnScreen.x
let y = anchorPositionOnScreen.y
Run Code Online (Sandbox Code Playgroud)