- This topic has 2개 답변, 3명 참여, and was last updated 4 years, 6 months 전에 by Presto.
2 답변 글타래를 보이고 있습니다
-
글쓴이글
-
-
iJoom참가자
- 글작성 : 8
- 답글작성 : 1
ARkit 실습
- 코드 참고하며 손으로 타이핑함
-
탭한 곳에 3D박스가 생긴다
-
PinchGesture로 박스의 크기를 확대 축소
- ARproject로 생성하지 않아도, SingleViewApp 프로젝트로 만든 후, ArSceneKit을 추가해주면 AR을 만들 수 있다.
@IBOutlet weak var arSceneView: ARSCNView! //스토리보드에서 추가 해준 ArSceneKitView private let configuration = ARWorldTrackingConfiguration() //«World Tracking Configuration» tracks the orientation and the position of the device. It also detects real surfaces, visible through the camera. private var node: SCNNode! // 3D space private var lastRotation: Float = 0-
ARWorldTrackingConfiguration : iOS 디바이스의 포지션과 orientation의 환경을 유저가 사용할 수 있게함 !
-
node: 3D Box만들때 이용
-
lastRotation: 박스를 회전시킬때 사용 (코드를 제대로 추가 하였으나, 작동X 원인 분석중)
override func viewDidLoad() { super.viewDidLoad() // 통계와 fps 그리고 timing information을 보여줌 self.arSceneView.showsStatistics = true self.arSceneView.debugOptions = [ARSCNDebugOptions.showFeaturePoints] self.addTapGesture() self.addPinchGesture() self.addRotationGesture() }- Statistics와 debugOptions을 앱에 보이게 하여, 리소스와 AR상태가 어떻게 작동되는지 실시간 체크 가능
@objc func didTap(_ gesture: UIPanGestureRecognizer){ // 1 let tapLocation = gesture.location(in: self.arSceneView) let results = self.arSceneView.hitTest(tapLocation, types: .featurePoint) // 2 guard let result = results.first else { return } // 3 let translation = result.worldTransform.translation //4 guard let node = self.node else { self.addBox(x: translation.x, y: translation.y, z: translation.z) return } node.position = SCNVector3Make(translation.x, translation.y, translation.z) self.arSceneView.scene.rootNode.addChildNode(self.node) }- UIPanGestureRecognizer의 gesture.location을 이용해, AR카메라 상태에서 탭한 곳의 로케이션을 받고, addBox함수를 이용해 3D 박스를 추가
func addBox(x: Float = 0, y: Float = 0, z: Float = -0.2) { // 1 let box = SCNBox(width: 0.1, height: 0.1, length: 0.1, chamferRadius: 0) // 2 let colors = [UIColor.green, // front UIColor.red, // right UIColor.blue, // back UIColor.yellow, // left UIColor.purple, // top UIColor.gray] // bottom let sideMaterials = colors.map { color -> SCNMaterial in let material = SCNMaterial() material.diffuse.contents = color material.locksAmbientWithDiffuse = true return material } box.materials = sideMaterials // 3 self.node = SCNNode() self.node.geometry = box self.node.position = SCNVector3(x, y, z) //4 arSceneView.scene.rootNode.addChildNode(self.node) }-
모든 면을 구별하기 위해 색 설정
-
x,y,z을 이용해 벡터의 스칼라 값으로 변경 후 arView에 추가함
extension float4x4{ var translation: SIMD3<Float>{ let translation = self.columns.3 return SIMD3<Float>(translation.x,translation.y, translation.z) } }-
원래는 Float3였으나, 지금은 SIMD3<스칼라값>로 문법이 변경
-
벡터의 스칼라값을 표현 하는 형태임!
let translation = result.worldTransform.translation //이것과 연관2020-05-02 오후 4:12 #7442
-
-
글쓴이글
2 답변 글타래를 보이고 있습니다
- 답변은 로그인 후 가능합니다.