Свойство экземпляра SceneKit "autoenablesDefaultLighting" не работает - PullRequest
0 голосов
/ 29 апреля 2019

Я пытался включить и выключить освещение по умолчанию в SCNView с помощью свойства экземпляра .autoenablesDefaultLighting, но не работает (ни в пользовательском интерфейсе, ни программно).

Мне нужно, чтобы все объекты были черными, когда нет света.

Как отключить освещение по умолчанию ?

Вот код:

import SceneKit
import QuartzCore

class GameViewController: NSViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        let scnView = SCNView(frame: NSRect(x: 0, 
                                            y: 0,
                                        width: 450, 
                                       height: 300))

        view.addSubview(scnView)
        scnView.autoenablesDefaultLighting = false     // DOESN'T WORK
        scnView.allowsCameraControl = true
        scnView.backgroundColor = NSColor.blue

        let scene = SCNScene()
        scnView.scene = scene

        let sphereGeo = SCNSphere(radius: 2)
        sphereGeo.segmentCount = 4
        sphereGeo.materials.first?.diffuse.contents = NSColor.lightGray
        let sphereNode = SCNNode(geometry: sphereGeo)
        sphereNode.name = "Sphere Node"
        scene.rootNode.addChildNode(sphereNode)
    }
}

1 Ответ

0 голосов
/ 30 апреля 2019

Кажется, это работает, только когда я использую Physically Based Rendering модель затенения.

let material = SCNMaterial()
material.lightingModel = SCNMaterial.LightingModel.physicallyBased

sceneView.autoenablesDefaultLighting = false

Если я использую свойство типа .physicallyBased для затенения моих моделей, освещение работает так, как предполагалось.

...