【问题标题】:SceneKit's instance property "autoenablesDefaultLighting" doesn't workSceneKit 的实例属性“autoenablesDefaultLighting”不起作用
【发布时间】:2019-09-18 02:19:46
【问题描述】:

我尝试通过.autoenablesDefaultLighting 实例属性在 SCNView 中打开和关闭默认照明,但不起作用(无论是在 UI 中还是以编程方式)。

当没有光的时候,我需要所有的物体都是黑色的。

如何关闭默认照明

这是一个代码:

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)
    }
}

【问题讨论】:

  • 我的问题是关于默认照明属性——而不是其他灯具(例如定向光、全方位、环境等)
  • 这些是完全不同的问题。
  • 该答案解释的是,如果您的场景中没有灯光,autoenablesDefaultLighting = false 将无效。
  • 是的,我的场景中没有灯光,只有无法关闭的默认灯光。请检查代码。

标签: swift macos scenekit


【解决方案1】:

它似乎只有在我使用Physically Based Rendering 着色模型时才有效。

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

sceneView.autoenablesDefaultLighting = false

如果我使用 .physicallyBased 类型属性为我的模型着色,则照明将按预期工作。

【讨论】:

    猜你喜欢
    • 2016-03-18
    • 1970-01-01
    • 2013-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多