使用allowsCameraControl时,我可以获得SCNView摄像头位置吗?

bug*_*oaf 5 ios scenekit

SCNView文档说,当用户更改视点时,设置allowsCameraControl为YES不会更新摄像机节点位置.当用户改变观点时,有没有办法获得用户修改的摄像机参数?

ric*_*ter 13

启用时allowsCameraControl,SceneKit会将自己的摄像机节点插入到场景中(作为场景根节点的直接子节点),并将该节点设置为视图pointOfView.读取该节点的camera属性以找出摄像机的位置和方向,或节点属性的属性,以查找摄像机的视野,深度限制等.

  • 如果您使用默认摄像头控制,则可以从SCNView本身获取POV节点!`让cameraNode = mySceneView.pointOfView` (3认同)
  • 这不完全正确。如果场景中还没有相机节点,它只会插入自己的相机节点。Apple 自己的 SceneKit 游戏模板证明了这一点。如果您查看默认代码,它首先设置一个相机节点并将其附加到根。`allowsCameraControl` 使用该相机。您可以通过更改其在该设置代码中的位置来确认这一点。但是,如果您注释掉这些行,*然后并且只有这样*才会自动为您插入相机。 (3认同)

Cra*_*ign 7

假设mySCNView是SCNView ..

@property (weak, nonatomic) IBOutlet SCNView *mySCNView;
Run Code Online (Sandbox Code Playgroud)

然后你可以从...获取相机位置

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);
Run Code Online (Sandbox Code Playgroud)

在我的情况下,我打开了allowCameraControl并调整了视图,记下了值,并在应用程序的开头设置它们.我只需要设置位置和方向,而不是旋转.