如何防止SceneKit在设备旋转时更改Camera FOV /位置?

时间:2019-06-16 06:12:43

标签: camera rotation scenekit fieldofview

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

ViewController具有一个SceneKit视图,该视图固定在父视图的顶部,底部和侧面。甚至在旋转时也可以确认附着。

所需设备为iPhone SE(最高12.9 iPad Pro)。

在iPad上,这种视觉问题已大大减少,但在iPhone上,失真,缩放和透视图变化却是显而易见的。

我不知道如何嵌入照片,否则我会告诉你,但是如果模型在正面和中央,并且在人像iPhone上为1英寸乘1英寸的正方形,则旋转到横向时,它在0.5英寸处变为0.25英寸垂直水平。

这是设置场景的代码。

        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上大大降低。

1 个答案:

答案 0 :(得分:0)