代码之家  ›  专栏  ›  技术社区  ›  Abhishek

在ARKIT中为3D对象添加阴影

  •  3
  • Abhishek  · 技术社区  · 6 年前

    谁能建议我如何以编程方式向3D对象添加阴影。请参见下图。我希望以同样的方式通过编程在椅子下面添加阴影 enter image description here .

    1 回复  |  直到 6 年前
        1
  •  6
  •   Akhzar Nazir    6 年前
        // To Add Shadow on 3D Model Just Copy Paste this code and it will appear a shadow of 3D Model on Ground
    
        let flourPlane = SCNFloor()
        let groundPlane = SCNNode()
        let groundMaterial = SCNMaterial()
        groundMaterial.lightingModel = .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