【发布时间】:2014-09-06 05:29:26
【问题描述】:
SCNView 文档说,当用户改变视角时,将 allowCameraControl 设置为 YES 不会更新相机节点位置。当用户改变视角时,有什么方法可以获取用户修改的相机参数?
【问题讨论】:
SCNView 文档说,当用户改变视角时,将 allowCameraControl 设置为 YES 不会更新相机节点位置。当用户改变视角时,有什么方法可以获取用户修改的相机参数?
【问题讨论】:
当您启用allowsCameraControl 时,SceneKit 将其自己的相机节点插入到场景中(作为场景根节点的直接子节点),并将该节点设置为视图的pointOfView。读取该节点的属性以找出相机的位置和方向,或者读取节点的camera 属性的属性以查找相机的视野、深度限制等。
【讨论】:
let cameraNode = mySceneView.pointOfView
allowsCameraControl 使用那台相机。您可以通过更改其在该设置代码中的位置来确认这一点。但是,如果您将这些行注释掉,只有那时会自动为您插入相机。
假设 mySCNView 是 SCNView..
@property (weak, nonatomic) IBOutlet SCNView *mySCNView;
然后你可以从..获取相机位置。
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);
在我的例子中,我打开了 allowCameraControl 并调整了视图,记下了这些值,并在应用程序启动时设置了它们。我只需要设置位置和方向,而不是旋转。
【讨论】: