【问题标题】:Can I get the SCNView camera position when using allowsCameraControl?使用allowCameraControl时可以获取SCNView摄像头位置吗?
【发布时间】:2014-09-06 05:29:26
【问题描述】:

SCNView 文档说,当用户改变视角时,将 allowCameraControl 设置为 YES 不会更新相机节点位置。当用户改变视角时,有什么方法可以获取用户修改的相机参数?

【问题讨论】:

    标签: ios scenekit


    【解决方案1】:

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

    【讨论】:

    • 我没看到!我一定是在看一些旧文档。
    • 我无法检索此节点。我怎样才能找到它?
    • @rickster 我找不到“作为场景根节点的直接子节点”描述的相机。它总是为零。 "sceneView.scene?.rootNode.childNodes.first?.camera", "sceneView.scene?.rootNode.camera" 和 "sceneView.scene?.rootNode.enumerateChildNodes({ (node, stop) in print("camera: ( node.camera)") })" 都返回 nil。
    • 如果您使用默认的相机控制,您可以从 SCNView 本身获取 POV 节点! let cameraNode = mySceneView.pointOfView
    • 这不是真的。如果场景中还没有相机节点,它只会插入自己的相机节点。苹果自己的 SceneKit 游戏模板证明了这一点。如果您查看默认代码,它首先设置一个相机节点并将其附加到根。 allowsCameraControl 使用那台相机。您可以通过更改其在该设置代码中的位置来确认这一点。但是,如果您将这些行注释掉,只有那时会自动为您插入相机。
    【解决方案2】:

    假设 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 并调整了视图,记下了这些值,并在应用程序启动时设置了它们。我只需要设置位置和方向,而不是旋转。

    【讨论】:

    • 感谢您列出所有重要的位置属性。
    猜你喜欢
    • 1970-01-01
    • 2018-04-06
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 2011-04-24
    • 1970-01-01
    • 1970-01-01
    • 2019-04-09
    相关资源
    最近更新 更多