如何防止场景套件在设备旋转时更改摄像机 FOV / 位置?



由于没有代码来处理旋转或更改任何内容,当我的设备从纵向旋转到横向时,在 SceneKit 视图中加载并居中的模型会更改透视、缩放和拉伸。

视图控制器具有固定在父视图的顶部、底部和侧面的 SceneKit 视图。这被证实即使在旋转时也能粘附。

所需的设备是iPhone SE至12.9 iPad Pro。

在iPad上,这种视觉问题大大减少,但在iPhone上,失真,缩放和视角变化非常明显。

我不知道如何嵌入照片,否则我会向您展示,但如果模型在纵向 iPhone 上位于正面和中间且 1 英寸乘 1 英寸正方形,当您旋转到横向时,它会在 0.25 英寸水平方向变为 0.5 英寸垂直。

下面是设置场景的代码。

let scene = SCNScene()
let shipScene = SCNScene(named: "merchant.scn")
guard let shipNode = shipScene?.rootNode.childNode(withName: "merchant", recursively: true)
else
{
fatalError("ShipModel is not found!")
}
self.shipNode = shipNode
self.shipNode?.position = SCNVector3(x:0, y:0, z:0)
scene.rootNode.addChildNode(self.shipNode!)
let lightNode = SCNNode()
lightNode.light = SCNLight()
lightNode.light?.type = .omni
lightNode.position = SCNVector3(x:0, y:2, z:10)
let cameraNode = SCNNode()
self.cameraNode = cameraNode
self.cameraNode?.camera = SCNCamera()
self.cameraNode?.position = SCNVector3(x:0, y:0, z:8)
self.cameraNode?.addChildNode(lightNode)
scene.rootNode.addChildNode(self.cameraNode!)
self.sceneKitView?.scene = scene
self.sceneKitView?.showsStatistics = false
self.sceneKitView?.backgroundColor = #colorLiteral(red: 0.08822073042, green: 0.08822073042, blue: 0.08822073042, alpha: 1)
self.sceneKitView?.allowsCameraControl = false

课堂上没有发生任何其他事情,但在设备旋转时会发生拉伸、缩小和视角变化。

它们在iPhone上更糟,但在iPad上大大减少。

将摄像机的投影方向更改为 SCNCameraProjectionDirection水平旋转为横向。

最新更新