Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

ARKit: Finding the coordinates of a SCNNode on the screen

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: Sketch

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.

like image 666
AscendingEagle Avatar asked Dec 27 '17 12:12

AscendingEagle


1 Answers

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
like image 94
Axel Guilmin Avatar answered Oct 13 '22 22:10

Axel Guilmin