I have a simple Swift ARKit setup where I have a SCNNode with a 3D object that is visible in an ARSCNView.
I want to determine the 2D coordinates of this object on the ARSCNView. By this I mean the x- and y-coordinates the object has when it is drawn onto the screen.
I have provided a sketch to illustrate what I mean:
Is there a way to get these coordinates, or at least an approximation? I need this in order to do some further processing with the camera frame. Basically I am interested in the area the object occupies on the screen.
You can use 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
Note : A point projected from the near (resp. far) clip plane will have a z component of 0 (resp. 1).
The same method can be used with ARAnchor
:
let anchor:ARAnchor = // ...
let anchorWorldPosition = SCNVector3(anchor.transform.columns.3)
let anchorPositionOnScreen = renderer.projectPoint(anchorWorldPosition)
let x = anchorPositionOnScreen.x
let y = anchorPositionOnScreen.y
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With