SceneKit: добавление направленного света к узлу камеры не имеет никакого эффекта
Основываясь на рекомендациях в этом ответе, цель состоит в том, чтобы добавить окружающий свет к сцене вместе с направленным светом на камеру.
Это работает в Редакторе сцены Xcode, с направленным светом, установленным на 70% белого и окружающим освещением на 50% белого. Углы Эйлера для направленного света используют значения по умолчанию.
Кодирование этой договоренности не удается. Это как если бы направленный свет не добавлялся. Там нет никакого эффекта на сцене; как будто существует только рассеянный свет.
Различные значения для x
Компоненты углов Эйлера не имеют значения - PI/2, PI и другие значения были опробованы, но все равно без изменений.
Добавление направленного света к корневому узлу сцены (scene.rootNode.addChildNode(directionalLightNode)
), однако, действительно добавляет свет к сцене.
fileprivate func addLightNode() {
// Create ambient light
let ambientLightNode = SCNNode()
ambientLightNode.light = SCNLight()
ambientLightNode.light!.type = .ambient
ambientLightNode.light!.color = UIColor(white: 0.70, alpha: 1.0)
// Add ambient light to scene
scene.rootNode.addChildNode(ambientLightNode)
// Create directional light
let directionalLight = SCNNode()
directionalLight.light = SCNLight()
directionalLight.light!.type = .directional
directionalLight.light!.color = UIColor(white: 1.0, alpha: 1.0)
directionalLight.eulerAngles = SCNVector3(x: 0, y: 0, z: 0)
// Add directional light to camera
let cameraNode = sceneView.pointOfView!
cameraNode.addChildNode(directionalLight)
}
1 ответ
Создайте SCNNode, например, с именем cameraNode. Создайте SCNCamera и назначьте его свойству камеры cameraNode. Добавьте cameraNode к сцене (как дочерний узел rootNode).
После этого вы можете добавить осветительный узел в качестве дочернего узла cameraNode или, если это единственная камера, в качестве дочернего узла узла pointOfView (который теперь представляет узел CameraNode, который вы создали и добавили в сцену). Камера по умолчанию и ее узел pointOfView не являются частью иерархии объектов сцены.