2016-07-31 117 views
0

我需要燈在我的場景中保持「固定」。目前爲止我發現的最好的照明方法實際上是使用scnView.autoenablesDefaultLighting = true,但我無法弄清楚是否有任何方法可以控制某些屬性。光線的強度太亮,光線的位置不同於我想要的位置,這些屬性。你可以改變scnView.autoenablesDefaultLighting的屬性嗎?

我試過使用各種各樣的其他燈,單獨編碼它們,但因爲它們添加到現場作爲節點,燈(在這些情況下)本身將移動,當我設置scnView.allowsCameraControl = true。一旦用戶開始移動相機,默認的燈光是唯一一個將保持「靜止」的燈光。你能訪問/控制默認燈光的屬性嗎?

+2

這裏的訣竅是將你的新燈光添加到相機節點或它的一個孩子。這樣,當相機移動時,光線也會移動。嘗試通過['scnView.pointOfView'屬性]訪問默認相機節點(https://developer.apple.com/library/mac/documentation/SceneKit/Reference/SCNSceneRenderer_Protocol/index.html#//apple_ref/occ/intfp/ SCNSceneRenderer/pointOfView)。 – lock

+0

讓你的燈光成爲相機的孩子,讓相機成爲根的孩子。將幾何節點放入容器中,使其成爲根的子項。保持幾何獨立於相機。 (切勿移動根!)默認照明和相機在選項中是基本的。創建你自己的更好,並不那麼困難。 – bpedit

+0

謝謝!我會試試看! –

回答

4

忘記allowsCameraControl和默認攝像頭和燈,如果你想控制你的場景。

let sceneView = SCNView() 
let cameraNode = SCNNode()   // the camera 
var baseNode = SCNNode()   // the basic model-root 
let keyLight = SCNLight()  ; let keyLightNode = SCNNode() 
let ambientLight = SCNLight() ; let ambientLightNode = SCNNode() 

func sceneSetup() { 
    let scene = SCNScene() 
    // add to an SCNView 
    sceneView.scene = scene 

    // add the container node containing all model elements 
    sceneView.scene!.rootNode.addChildNode(baseNode) 

    cameraNode.camera = SCNCamera() 
    cameraNode.position = SCNVector3Make(0, 0, 50) 
    scene.rootNode.addChildNode(cameraNode) 

    keyLight.type = SCNLightTypeOmni 
    keyLightNode.light = keyLight 
    keyLightNode.position = SCNVector3(x: 10, y: 10, z: 5) 
    cameraNode.addChildNode(keyLightNode) 

    ambientLight.type = SCNLightTypeAmbient 
    let shade: CGFloat = 0.40 
    ambientLight.color = UIColor(red: shade, green: shade, blue: shade, alpha: 1.0) 
    ambientLightNode.light = ambientLight 
    cameraNode.addChildNode(ambientLightNode) 

    // view the scene through your camera 
    sceneView.pointOfView = cameraNode 

    // add gesture recognizers here 
} 

移動或旋轉cameraNode以實現視圖中的動作。或者,移動或旋轉baseNode。無論哪種方式,您的光線相對於相機保持固定。

如果你想讓你的燈相對於模型固定,讓他們的孩子baseNode而不是相機。

相關問題