본글은 ARKit 동영상 강의를 기반으로 작성한 글입니다. 출처는 아래에서 확인할 수 있습니다.
오역이나 잘못된 정보에 대한 수정은 언제든지 환영합니다 :)
ARKit 을 이용해 직육면체 박스 만들기
이전 ARKit시작하기 에서는 위와 같이 art.scnassets 안의 파일을 바로 scene으로 적용함
본글에서는 코드를 통해 간단한 직육면체 박스를 만들어보도록 함
- 우선 이전의 예제와 같이 아래의 세단계를 수행
- import SceneKit, ARKit
- ARSCNViewDelegate 상속
- ARSCNView 를 상속받는 sceneView 추가
2. SCNScene 객체 생성
let scene = SCNScene()
3. SCNBox 객체 생성
let box : SCNGeometry = SCNBox(width: 0.2, height: 0.2, length: 0.2, chamferRadius: 0)
SCNBox 에는 width
, height
, length
, chamferRadius
네가지 속성이 존재. 이때 속성의 단위는 meter
class SCNBox : SCNGeometry
- A six-sided polyhedron geometry whose faces are all rectangles, optionally with rounded edges and corners.
4. SCNMaterial 객체 생성후 속성 추가
let material = SCNMaterial()
material.diffuse.contents = UIColor.red
material은 큐브(여기서는 box)에 붙일 수 있는 것으로 색깔이 될 수도, 이미지가 될 수도 있음. 위의 예에서는 빨간색 색상을 적용
var diffuse: SCNMaterialProperty { get }
— An object that manages the material’s diffuse response to lighting.
var contents: Any? { get set }
— The visual contents of the material property — a color, image, or source of animated content. Animatable.
5. SCNNode 객체 생성 후 속성 추가
궁극적으로 SceneKit 에서는 다양한 material 과 모양이 적용된 노드들을 가지고 SceneKitView에 적용할 것이기 때문에 가장 중요한 부분이라고 할 수 있음.
let node = SCNNode()node.geometry = boxnode.geometry?.materials = [material]node.position = SCNVector3(0, 0.1, -0.5)
node의 geometry와 적용될 materials 가 앞서 생성한 box와 material 이라고 설정하고 위치를 정해줌.
3D 공간에서 작업할 것이므로 Vector 를 사용하며 x, y, z 좌표를 지정해줌. 이도 meter 법 적용.
x — 좌/우
y — 상/하
z — 앞/뒤
6. scene의 rootNode 에 생성한 node 를 childNode로서 추가
scene.rootNode.addChildNode(node)