SCNConstraint를 사용하여 반드시 위에서 빛이 닿도록 한다
소개
ARKit로 비행기를 날릴 때 빛을 맞추는 방법(SCNLight의 배치 방법)에 곤란했으므로 그 대처 방법을 남겨 둔다.
아무것도 생각하지 않고 아래와 같이 비행기의 SCNNode의 childNode로서 라이트를 add하면 그림과 같이 비행기 위에서 빛을 비추는 것이 가능하다.
if let ship = SCNScene(named: "art.scnassets/ship.scn")!.rootNode.childNode(withName: "ship", recursively: true) {
let light = SCNLight()
light.type = .omni
let lightNode = SCNNode()
lightNode.light = light
lightNode.position = SCNVector3(ship.position.x,ship.position.y + 2,ship.position.z)
ship.addChildNode(lightNode)
}
그러나 단순히 라이트를 비행기의 자식 노드로 추가하기 때문에 비행기를 굉장히 회전시킬 때 라이트도 마찬가지로 회전합니다.
SCNConstraint 사용
SCNConstraint란 SCNNode간의 위치 관계에 제약을 주기 위한 설정이며, StoryBoad를 사용하여 UI 부품을 배치할 때 설정하는 Constraint의 SCNKit판에 해당하는 것.
이 경우, 라이트는 반드시 비행기의 Y 좌표의 +0.5에 위치한다는 제약을 마련하면, 비행기의 방향에 관계없이 위로부터 빛을 비추는 것이 가능하다.
if let ship = SCNScene(named: "art.scnassets/ship.scn")!.rootNode.childNode(withName: "ship", recursively: true) {
let light = SCNLight()
light.type = .omni
let lightNode = SCNNode()
lightNode.light = light
let positionConstraint = SCNTransformConstraint(inWorldSpace: true, with: { (node, transform) -> SCNMatrix4 in
let pos = node.position
return SCNMatrix4MakeTranslation(pos.x, pos.y + 2, pos.z)
})
lightNode.constraints = [positionConstraint]
ship.addChildNode(lightNode)
}
Reference
이 문제에 관하여(SCNConstraint를 사용하여 반드시 위에서 빛이 닿도록 한다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/noby111/items/f46797a8b46a46c787f7텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)