Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Can I get the SCNView camera position when using allowsCameraControl?

Tags:

ios

scenekit

The SCNView documentation says that setting allowsCameraControl to YES does not update the camera node position when the user changes the point of view. Is there any way to get the user-modified camera parameters when the user changes the point of view?

like image 474
bugloaf Avatar asked Jul 15 '14 20:07

bugloaf


2 Answers

When you enable allowsCameraControl, SceneKit inserts its own camera node into the scene (as an immediate child of the scene's root node), and sets that node as the view's pointOfView. Read the properties of that node to find out the camera's position and orientation, or the properties of the node's camera attribute to find the camera's field of view, depth limits, etc.

like image 71
rickster Avatar answered Nov 02 '22 02:11

rickster


Assuming mySCNView is the SCNView..

@property (weak, nonatomic) IBOutlet SCNView *mySCNView;

Then you can get the camera position from..

NSLog(@"Camera position: %f %f %f", _mySCNView.pointOfView.position.x, _mySCNView.pointOfView.position.y, _mySCNView.pointOfView.position.z);

NSLog(@"Camera rotation: %f %f %f %f", _mySCNView.pointOfView.rotation.x, _mySCNView.pointOfView.rotation.y, _mySCNView.pointOfView.rotation.z, _mySCNView.pointOfView.rotation.w);

NSLog(@"Camera orientat: %f %f %f %f", _mySCNView.pointOfView.orientation.x, _mySCNView.pointOfView.orientation.y, _mySCNView.pointOfView.orientation.z,_mySCNView.pointOfView.orientation.w);

In my case, I turned on allowsCameraControl and adjusted the view, noted down the values, and set them at the start of the app. I only needed to set position and orientation, not rotation.

like image 9
CraicDesign Avatar answered Nov 02 '22 03:11

CraicDesign