ARKit:在屏幕上查找 SCNNode 的坐标
ARKit: Finding the coordinates of a SCNNode on the screen
我有一个简单的 Swift ARKit 设置,其中我有一个 SCNNode 和一个在 ARSCNView 中可见的 3D 对象。
我想确定这个对象在ARSCNView 上的二维坐标。我这里指的是对象绘制到屏幕上时的 x 和 y 坐标。
我提供了一个草图来说明我的意思:
有没有办法得到这些坐标,或者至少是一个近似值?我需要这个以便对相机框架进行一些进一步处理。基本上我对对象在屏幕上占据的区域感兴趣。
您可以使用 SCNSceneRenderer projectPoint:point
:
Projects a point from the 3D world coordinate system of the scene to the 2D pixel coordinate system of the renderer.
let node:SCNNode = // Your node
let nodeWorldPosition = node.position
let nodePositionOnScreen = renderer.projectPoint(nodeWorldPosition)
let x = nodePositionOnScreen.x
let y = nodePositionOnScreen.y
注意:从近(或远)裁剪平面投影的点的 z 分量将为 0(或 1)。
同样的方法可以用在ARAnchor
:
let anchor:ARAnchor = // ...
let anchorWorldPosition = SCNVector3(anchor.transform.columns.3)
let anchorPositionOnScreen = renderer.projectPoint(anchorWorldPosition)
let x = anchorPositionOnScreen.x
let y = anchorPositionOnScreen.y
我有一个简单的 Swift ARKit 设置,其中我有一个 SCNNode 和一个在 ARSCNView 中可见的 3D 对象。
我想确定这个对象在ARSCNView 上的二维坐标。我这里指的是对象绘制到屏幕上时的 x 和 y 坐标。
我提供了一个草图来说明我的意思:
有没有办法得到这些坐标,或者至少是一个近似值?我需要这个以便对相机框架进行一些进一步处理。基本上我对对象在屏幕上占据的区域感兴趣。
您可以使用 SCNSceneRenderer projectPoint:point
:
Projects a point from the 3D world coordinate system of the scene to the 2D pixel coordinate system of the renderer.
let node:SCNNode = // Your node
let nodeWorldPosition = node.position
let nodePositionOnScreen = renderer.projectPoint(nodeWorldPosition)
let x = nodePositionOnScreen.x
let y = nodePositionOnScreen.y
注意:从近(或远)裁剪平面投影的点的 z 分量将为 0(或 1)。
同样的方法可以用在ARAnchor
:
let anchor:ARAnchor = // ...
let anchorWorldPosition = SCNVector3(anchor.transform.columns.3)
let anchorPositionOnScreen = renderer.projectPoint(anchorWorldPosition)
let x = anchorPositionOnScreen.x
let y = anchorPositionOnScreen.y