Как предотвратить SceneKit, изменяя FOV / Положение камеры при повороте устройства? - PullRequest
0 голосов
/ 16 июня 2019

Без кода для обработки поворотов или изменения чего-либо, когда мое устройство поворачивается из портретного в горизонтальное положение, модель, загруженная и центрированная в представлении SceneKit, меняет перспективу, масштаб и растяжение.

ViewController имеет представление SceneKitэто прикреплено к вершине, основанию и сторонам родительского представления.Это подтверждается, чтобы придерживаться даже при повороте.

Требуются устройства iPhone SE до 12,9 iPad Pro.

На iPad эта визуальная проблема значительно уменьшена, но на iPhone искажения, масштабирование и изменения перспективы удивительно очевидны.

Я не знаю, как вставлять фотографии, иначе я бы показал вам, ноесли модель расположена спереди и по центру и имеет квадратную форму 1 на 1 дюйм на портретном iPhone, при повороте на альбомную ориентацию она становится равной 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.

...