【问题标题】:Default camera position not changing?默认相机位置没有改变?
【发布时间】:2015-03-17 01:20:54
【问题描述】:

所以我想了解 allowCameraControl 是如何真正工作的。

我有一个场景,我设置了allowsCameraControl = true。当我平移并且场景旋转或平移(两个手指......)时,我不明白场景套件对我来说真正发生了什么变化。

我期待相机节点改变位置或旋转。不是这样。 我还记录了场景的 rootNode 的位置和旋转...没有变化。

所以为了清楚起见,在每次帧更新调用的渲染委托中,我记录了我为场景设置的相机节点的位置和旋转,我记录了根节点的位置和旋转,我还记录了 te我添加到场景中的节点的位置和旋转。这些都没有显示位置和/或旋转的任何变化。

谁能向我解释当使用标准相机控件旋转或平移场景时场景套件会发生什么变化?

【问题讨论】:

    标签: scenekit


    【解决方案1】:

    创建了一个新相机,保持原来的相机不变。

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

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

    让我们知道你发现了什么!

    【讨论】:

    • 没错。我可以看到创建了一个新相机。这是日志。 POV = |没有孩子> POV = |没有孩子> POV = |没有孩子>.
    【解决方案2】:

    确实创建了一个新相机,而原始相机保持不变。场景图也没有改变。新相机不是场景图的一部分,可以使用 scnView.pointOfView

    【讨论】:

      【解决方案3】:

      刚刚发现了一种简单的方法,可以检测 SceneKit 使用 KVO 切换新相机的时刻。

      斯威夫特 5

      在你的类中声明一个观察者属性:

      var povObserver: NSKeyValueObservation?
      

      然后,设置观察者:

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

      完成后,您可以将 povObserver 设置为 nil

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-03-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多