본글은 ARKit 동영상 강의를 기반으로 작성한 글입니다. 출처는 아래에서 확인할 수 있습니다.
오역이나 잘못된 정보에 대한 수정은 언제든지 환영합니다 :)
이번 글에서는 3D 모델을 표현한 .dae 파일을 어플리케이션에 적용하는 방법에 대해 알아본다.
- 터치했을 때 3D 모델을 추가하는
addHouse(hitResult:)
함수 작성
저번 글까지는 평면을 터치하면 박스를 add하는 addBox(hitResult:)
함수를 이용했음.
이번에는addHouse(hitResult:)
함수를 통해 .dae 파일을 적용할 것
- 노드들을 담고있는 새로운 scene생성.
let houseScene = SCNScene(named: "art.scnassets/house.dae")
이때named:
인자에는 .dae 경로를 작성
- 표현할 노드 지정
let houseNode = houseScene?.rootNode.childNode(withName: "SketchUp", recursively: true)
설정한 houseScene
에 있는 노드 중 나타날 노드를 지정해줘야하는데, .dae파일에서 Scene graph
를 보면 SketchUp
이 최상단 노드로 위치해있음.
따라서 withName :
에 “SketchUp”
을 써주면 .dae에 있는 모든 노드가 포함될 것. 특정 노드만 선택하고 싶으면 “instance_0”
처럼 해당 노드의 이름을 써주면 됨. 이름은 변경 가능
- 노드의 포지션 지정
houseNode?.position = SCNVector3(hitResult.worldTransform.columns.3.x,hitResult.worldTransform.columns.3.y ,hitResult.worldTransform.columns.3.z)
사용자가 터치한 위치에 따라 생성되게 함
- 스케일 조정
houseNode?.scale = SCNVector3(0.01,0.01,0.01)
해당 노드가 너무 클 때 .scale
속성을 이용해 width
, height
, depth
를 조정할 수 있음. 현재는 원래 크기의 0.01 만큼으로 줄여줌
- 메인 scene에 적용
self.sceneView.scene.rootNode.addChildNode(houseNode!)