默认相机位置是否不变?

问题描述 投票:6回答:3

所以我试图了解allowCameraControl的工作原理。

我有一个场景,我设置了allowCameraControl = true。当我四处移动并且场景旋转或平移(两个手指...)时,我不知道哪种场景工具真正改变了我。

我原以为相机节点会改变位置或旋转。并非如此。我还记录了场景的rootNode的位置和旋转...不变。

因此,为了清楚起见,在每次进行帧更新的渲染委托中,我记录为场景设置的摄影机节点的位置和旋转,我记录了根节点的位置和旋转,也记录了位置和旋转到我添加到场景中的节点。这些都没有显示位置和/或旋转的任何变化。

有人可以使用标准的摄影机控件向我解释场景旋转或平移时会发生什么变化吗?

scenekit
3个回答
4
投票

创建了一个新的相机,保留了原来的相机。

如果使用showsStatistics属性显示检查器,您会注意到视点从您拥有的摄像机(即使它是“无标题”)更改为kSCNFreeViewCameraName

遗憾的是,没有太多关于此行为的文档,但是您可以在节点层次结构中找到它。

让我们知道您的发现!


5
投票

确实创建了新相机,而原来的相机保持不变。场景图也保持不变。新相机不是场景图的一部分,可以通过以下方式访问scnView.pointOfView


0
投票

只是遇到了一种简单的方法来检测SceneKit使用KVO切换新相机的时刻。

Swift 5

在您的课程中声明一个观察者属性:

var povObserver: NSKeyValueObservation?

然后,设置观察者:

povObserver = defaultCameraController.observe(\.pointOfView, options: [.new]) {  (cameraController, change) in
    if let newPov = cameraController.pointOfView {
        // Access new camera here
    }
}

完成后,可以将povObserver设置为零

© www.soinside.com 2019 - 2024. All rights reserved.