【问题标题】:Zoom in and out of a scene?放大和缩小场景?
【发布时间】:2016-04-02 22:58:17
【问题描述】:

在 SceneKit 中放大和缩小场景的正确方法是什么?

因此,当我在场景中启用标准相机控制并捏合和拉出时,场景会变得越来越小。那个夹子到底在做什么?

它改变了整个场景的比例吗?是否将相机移近?

我想以编程方式实现相同的效果。

我应该怎么做才能获得相同的效果?

【问题讨论】:

    标签: scenekit


    【解决方案1】:

    当您捏合时,相机的视野(xFoxyFov 属性)会发生变化。改变视野并不是最好的缩放方式,因为它会极大地改变视角。

    将相机移近你的物体是一个很好的解决方案。

    另请注意,“免费相机”行为适用于 3D 查看器(例如 Preview.app),但在任何其他应用程序中会很快变得令人沮丧。此时您可能想要实现自己的相机控制器。

    【讨论】:

    • 所以我改变了xFov,我得到了同样的效果。有效。当你说实现你自己的相机控制器时......它与标准控制器有什么不同,会让它不那么令人沮丧? (只是想理解你的意思)。谢谢
    • 我的意思是,如果有人在使用allowsCameraControl API 并发现他必须找到技巧以使其按照自己的方式工作,那么从头开始重新实现相机控制器可能是一个不错的选择主意。但似乎这就是你正在做的事情。
    【解决方案2】:

    在任何给定点,相机在空间中都有一个位置,与每个世界轴相比,它的每个轴都有一个旋转,要放大和缩小,你必须将相机移动到+z/-z 轴方向。

    沿着相机自己的 Z/-Z 轴。

    【讨论】:

      【解决方案3】:

      对于那些在 OSX 上的,我在我的 SCNView 子类中使用了这个:

      override func scrollWheel(theEvent: NSEvent) {
          let cam = pointOfView!.camera
          cam!.xFov = cam!.xFov - Double(theEvent.deltaY)
          cam!.yFov = cam!.yFov - Double(theEvent.deltaY)
      }
      

      有两个(小)问题可以通过一些额外的代码来解决。一是这些值可能会变为负数,此时图像会由内向外翻转。另一个是如果你真的转动滚轮,鼠标加速会导致缩放级别过快。对这两者进行限制是个好主意,但在我的应用中,行为与上面一样很好。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-11
        • 2021-11-05
        • 1970-01-01
        • 2023-02-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多