2016-02-01 70 views
3

我想從場景的左側投射一個短陰影。我的燈光設置如下:在所有節點上投射陰影SCNLight

func setupLights() { 

    // Create shadow 
    let spotLight = SCNLight() 
    spotLight.type = SCNLightTypeSpot 
    spotLight.spotInnerAngle = 30.0 
    spotLight.spotOuterAngle = 80.0 
    spotLight.castsShadow = true 
    let spotLightNode = SCNNode() 
    spotLightNode.light = spotLight 
    spotLightNode.position = SCNVector3(1.5, 1.5, 1.5) 
    rootNode.addChildNode(spotLightNode) 

    // Create ambient light 
    let ambientLight = SCNLight() 
    ambientLight.type = SCNLightTypeAmbient 
    ambientLight.color = UIColor.whiteColor() 
    let ambientLightNode = SCNNode() 
    ambientLightNode.name = "AmbientLight" 
    ambientLightNode.light = ambientLight 
    ambientLightNode.castsShadow = true 
    rootNode.addChildNode(ambientLightNode) 

    // Create an omni-directional light 
    let omniLight = SCNLight() 
    omniLight.type = SCNLightTypeOmni 
    omniLight.color = UIColor.whiteColor() 
    let omniLightNode = SCNNode() 
    omniLightNode.name = "OmniLight" 
    omniLightNode.light = omniLight 
    omniLightNode.position = SCNVector3(x: -10.0, y: 20, z: 10.0) 
    omniLightNode.castsShadow = true 
    rootNode.addChildNode(omniLightNode) 
} 

有了這個代碼,我有一個光明的場面與一些很輕,長長的影子不是來自左側。我試圖改變目前SCNVector3(1.5,1.5,1.5)的位置,但無論我放置哪個位置,陰影都會消失。有任何想法嗎?

+1

值得注意的是['zFar']的默認值(https://developer.apple.com/library/prerelease/ios/documentation/SceneKit/Reference/SCNLight_Class/index.html#//apple_ref/occ/ instp/SCNLight/zFar),光線和產生陰影的物體之間的最大距離爲1.0。移動聚光燈的位置可能意味着你超過了這個距離,結果是沒有陰影。 全景,環境光和聚光燈對於現場來說可能有點多。對於一個「黑影」,我會嘗試使用灰色的環境光,以及只有聚光燈(不是全向)。 – lock

回答

4

如果您想在場景的所有部分使用定向燈,請使用SCNLightTypeSpot作爲燈光的type。或者可能是SCNLightTypeDirectional

每文檔由光投射陰影僅當該屬性的值是YES並且光的type屬性是SCNLightTypeSpot照亮SCNLight.castsShadow:

幾何形狀。默認值是NO。

但@mnuages在SceneKit shadows on wall中指出方向燈可以投射陰影。