Я использовал ваш код, это работа, но я столкнулся с одной проблемой. Некоторое время тень не отображается в первый раз. Если я уменьшу или поверну объект, появится тень. Есть ли у вас идеи, почему это произошло?

ункция, которую я использую для отображения объекта на плоской поверхности.

private func loadScene(path: String) -> SCNNode {

    let spotLight = SCNLight()
    spotLight.type = SCNLight.LightType.probe

    spotLight.spotInnerAngle = 30.0
    spotLight.spotOuterAngle = 80.0
    spotLight.castsShadow = true

    let result = SCNNode()
    result.light = spotLight
    result.position = SCNVector3(-10.0, 20.0, 10.5)
    result.addChildNode(result)

    let scene = SCNScene(named: path)!
    for node in scene.rootNode.childNodes {
        result.addChildNode(node)
    }       
    return result
}

Я хочу отобразить тень на плоской поверхности, как это изображение.

Когда я устанавливаю тип прожектора, как показано ниже

spotLight.type = SCNLight.LightType.directional

Он показывает сам объект светлой / темной тенью и не отбрасывает тень на поверхность.

Может кто-нибудь, пожалуйста, подскажите мне, как я могу добиться результата, как показано на рисунке?

 mnuages10 окт. 2017 г., 11:27

Ответы на вопрос(1)

// Чтобы добавить тень на 3D-модель, просто скопируйте Вставьте этот код, и на земле появится тень 3D-модели

let flourPlane = SCNFloor()
let groundPlane = SCNNode()
let groundMaterial = SCNMaterial()
groundMaterial..constant
groundMaterial.writesToDepthBuffer = true
groundMaterial.colorBufferWriteMask = []
groundMaterial.isDoubleSided = true
flourPlane.materials = [groundMaterial]
groundPlane.geometry = flourPlane
//
mainNode.addChildNode(groundPlane)
// Create a ambient light
let ambientLight = SCNNode()
ambientLight.light = SCNLight()
ambientLight.light?.shadowMode = .deferred
ambientLight.light?.color = UIColor.white
ambientLight.light?.type = SCNLight.LightType.ambient
ambientLight.position = SCNVector3(x: 0,y: 5,z: 0)
// Create a directional light node with shadow
let myNode = SCNNode()
myNode.light = SCNLight()
myNode.light?.type = SCNLight.LightType.directional
myNode.light?.color = UIColor.white
myNode.light?.castsShadow = true
myNode.light?.automaticallyAdjustsShadowProjection = true
myNode.light?.shadowSampleCount = 64
myNode.light?.shadowRadius = 16
myNode.light?.shadowMode = .deferred
myNode.light?.shadowMapSize = CGSize(width: 2048, height: 2048)
myNode.light?.shadowColor = UIColor.black.withAlphaComponent(0.75)
myNode.position = SCNVector3(x: 0,y: 5,z: 0)
myNode.eulerAngles = SCNVector3(-Float.pi / 2, 0, 0)
// Add the lights to the container
mainNode.addChildNode(ambientLight)
mainNode.addChildNode(myNode)
// End
 Mayuri R Talaviya05 сент. 2018 г., 09:21
Я использовал ваш код, это работа, но я столкнулся с одной проблемой. Некоторое время тень не отображается в первый раз. Если я уменьшу или поверну объект, появится тень. Есть ли у вас идеи, почему это произошло?

Ваш ответ на вопрос