ARKit — 13. 3D 파일 적용하기

naljin
3 min readNov 28, 2018

--

본글은 ARKit 동영상 강의를 기반으로 작성한 글입니다. 출처는 아래에서 확인할 수 있습니다.

오역이나 잘못된 정보에 대한 수정은 언제든지 환영합니다 :)

이번 글에서는 3D 모델을 표현한 .dae 파일을 어플리케이션에 적용하는 방법에 대해 알아본다.

3D 모델을 .dae 파일로 변환하기 보러가기

  1. 터치했을 때 3D 모델을 추가하는 addHouse(hitResult:) 함수 작성

저번 글까지는 평면을 터치하면 박스를 add하는 addBox(hitResult:)함수를 이용했음.

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!)

실제 구동 화면

출처

이전 글 👈🏻

--

--

No responses yet