Ориентация направленного света и добавление к сцене в ARKit

Я нашел несколько отличных примеров того, как добавить направленный свет в свой код, но не как изменить ориентацию, а также добавить его в мою сцену. Как мне сделать это с моим кодом? Вот мой легкий класс:

class Lighting: Entity, HasDirectionalLight {
    required init() {
        super.init()
        self.light = DirectionalLightComponent(color: .white,
                                           intensity: 100000,
                                    isRealWorldProxy: true)
    }
}

А вот функция, которая его вызывает:

func addTableToPlane(arView: ARView) {
        let tableAnchor = AnchorEntity(plane: .horizontal)
        let table = try! Entity.load(named: "Table_1500")
        tableAnchor.addChild(table)

        let dirLight = Lighting().light
        let shadow = Lighting().shadow
        tableAnchor.components.set(shadow!)
        tableAnchor.components.set(dirLight)
}

Я новичок в ARKit, поэтому я не понял, как редактировать ориентацию направленного света, поскольку он у меня есть.

Еще один неудачный метод, который я пробовал, - это создать функцию освещения, но я не смог понять, как добавить ее в сцену:

func addLights(arView: ARView) {
    // 1
    let directionalLight = SCNLight()
    directionalLight.type = .directional
    directionalLight.intensity = 500
    // 2
    directionalLight.castsShadow = true
    directionalLight.shadowMode = .deferred
    // 3
    directionalLight.shadowColor = UIColor(red: 0, green: 0, blue: 0, alpha: 0.5)
    // 4
    let directionalLightNode = SCNNode()
    directionalLightNode.light = directionalLight
    directionalLightNode.rotation = SCNVector4Make(1, 0, 0, -Float.pi / 3)
    sceneView.scene.rootNode.addChildNode(directionalLightNode)
}

Затем я добавил addLights (arView: uiView) в функцию addTableToPlane. Я попытался добавить света с помощью:

arView.scene.rootNode.addChildNode(ambientLightNode)

но это дает ошибку, что у меня нет childNode и так далее. Я полагаю, что я избалован приличной документацией для Python, в которой представлены примеры, перемежающиеся, чтобы помочь выяснить проблемы, в отличие от чрезмерно кратких документов для Xcode, таких как, черт возьми, я делаю с помощью «Используйте взгляд света (at: from: upVector : relativeTo :) Метод наведения света ". Куда мне это поставить? Где я могу найти ответы на эти простые вопросы? Последние пару дней гоняться за хвостом только для того, чтобы повернуть свет, разочаровывает.


person visualride    schedule 19.05.2020    source источник


Ответы (1)


Используйте следующий код для управления ориентацией направленного света:

Учтите, что положение направленного света не имеет значения!

import ARKit
import RealityKit

class Lighting: Entity, HasDirectionalLight, HasAnchoring {

    required init() {
        super.init()

        self.light = DirectionalLightComponent(color: .green,
                                           intensity: 1000,
                                    isRealWorldProxy: true)
    }
}

class ViewController: UIViewController {

    @IBOutlet var arView: ARView!

    override func viewWillAppear(animated: Bool) {
        super.viewWillAppear(animated) 

        let light = Lighting()
        light.orientation = simd_quatf(angle: .pi/8,
                                        axis: [0, 1, 0])

        let boxAnchor = try! Experience.loadBox()

        let directLightAnchor = AnchorEntity()
        directLightAnchor.addChild(light)

        boxAnchor.addChild(directLightAnchor)
        boxAnchor.steelBox!.scale = [30,30,30]
        boxAnchor.steelBox!.position.z = -3

        arView.scene.anchors.append(boxAnchor)
    }
}

Если вы хотите узнать, как реализовать ориентацию направленного света в SceneKit, прочтите этот пост .

введите здесь описание изображения

person Andy Fedoroff    schedule 08.06.2020