如何流畅地更改不会动画的SCNCamera的FoV?



我有一个SCNCamera在iOS上的3D SceneKit视图中工作。

当我改变屏幕的方向时,为了保持世界对象的大小和相对位置相同,我需要改变SCNCamera的FoV。

但是,我无法为这种变化设置动画,因此当 FoV 从一个设置更改为另一个设置时,世界会"闪烁"或"脉冲"。

有没有办法顺利地做到这一点,这样FoV的变化就不会突然到导致世界上的物体"脉冲"?

当设备改变方向时,将执行以下代码:

if UIDevice.current.orientation == .landscapeLeft || UIDevice.current.orientation == .landscapeRight
{
self.cameraNode?.camera?.fieldOfView  = 38
}
else
{
self.cameraNode?.camera?.fieldOfView  = 50
}

我尝试将 FoV 更改包装在 UIView 动画块中,但这不起作用。

我试图延迟在线程上运行它,但随着 FoV 的变化,这仍然会导致视觉"脉冲"。

有没有办法使这种过渡顺利进行?

您需要添加带有SCNTransaction的代码,如下所示才能制作动画。

SCNTransaction 类定义了场景工具包的场景体系结构 内容更改,包括隐式动画:事务是 将节点的多个更改组合在一起的单个原子操作, 几何体、材质或其他场景内容。

if UIDevice.current.orientation == .landscapeLeft || UIDevice.current.orientation == .landscapeRight {
SCNTransaction.begin()
SCNTransaction.animationDuration = 1.5
self.cameraNode?.camera?.fieldOfView = 38
SCNTransaction.commit()
} else {
SCNTransaction.begin()
SCNTransaction.animationDuration = 1.5
self.cameraNode?.camera?.fieldOfView = 50
SCNTransaction.commit()
}

相关内容

  • 没有找到相关文章

最新更新