【发布时间】:2016-04-02 22:58:17
【问题描述】:
在 SceneKit 中放大和缩小场景的正确方法是什么?
因此,当我在场景中启用标准相机控制并捏合和拉出时,场景会变得越来越小。那个夹子到底在做什么?
它改变了整个场景的比例吗?是否将相机移近?
我想以编程方式实现相同的效果。
我应该怎么做才能获得相同的效果?
【问题讨论】:
标签: scenekit
在 SceneKit 中放大和缩小场景的正确方法是什么?
因此,当我在场景中启用标准相机控制并捏合和拉出时,场景会变得越来越小。那个夹子到底在做什么?
它改变了整个场景的比例吗?是否将相机移近?
我想以编程方式实现相同的效果。
我应该怎么做才能获得相同的效果?
【问题讨论】:
标签: scenekit
当您捏合时,相机的视野(xFox 和 yFov 属性)会发生变化。改变视野并不是最好的缩放方式,因为它会极大地改变视角。
将相机移近你的物体是一个很好的解决方案。
另请注意,“免费相机”行为适用于 3D 查看器(例如 Preview.app),但在任何其他应用程序中会很快变得令人沮丧。此时您可能想要实现自己的相机控制器。
【讨论】:
allowsCameraControl API 并发现他必须找到技巧以使其按照自己的方式工作,那么从头开始重新实现相机控制器可能是一个不错的选择主意。但似乎这就是你正在做的事情。
在任何给定点,相机在空间中都有一个位置,与每个世界轴相比,它的每个轴都有一个旋转,要放大和缩小,你必须将相机移动到+z/-z 轴方向。
沿着相机自己的 Z/-Z 轴。
【讨论】:
对于那些在 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)
}
有两个(小)问题可以通过一些额外的代码来解决。一是这些值可能会变为负数,此时图像会由内向外翻转。另一个是如果你真的转动滚轮,鼠标加速会导致缩放级别过快。对这两者进行限制是个好主意,但在我的应用中,行为与上面一样很好。
【讨论】: