ARkit scene과 친해져야 AR 개발이 수월해진다

태그: 

3 답변 글타래를 보이고 있습니다
  • 글쓴이
    • odyflame
      참가자
      • 글작성 : 17
      • 답글작성 : 21

      ARkit 두번째 공부 내용

      scenekit

      이 내용은 UDemy강의에서 marstering ARkit for iOS라는 강의로 시작했다.
      arkit을 사용하기 전 scenekit을 먼저 다루어 보는 시간을 가졌다.
      scenekit으로 우리가 보는 화면에서 가상의 물체들을 생성하고, 볼 수 있다.
      요즘 아이패드 프로 4세대의 카메라의 성능이 더 좋아지고, 거기다 애플이 공식적으로 라이다 센서까지 지원해주어 애플이 AR쪽에도 상당히 힘을 실을 것이라는 생각이 든다.

      scnenkit을 공부하면서

      하루에 한 섹션을 듣자는 마인드로 강의를 듣고 있다. scnenkit을 처음 사용하면 이런 화면이 뜨는데 처음 프로젝트를 만들 경우에는 augmented reality app을 선택해서 하는 것이 좋다.

      ARKit templete choosing screen

      선택하고 난 후면 앱 내에서 art.scnasset이라는 파일이 있고 그 안에 ship.scn 파일이 있으며 오른쪽 사진이 바로 그 모양이다.

      메인 스토리보드로 들어가면 우리가 아는 view controller 위에 ARSCNView가 있으며 이게 우리가 보는 화면에서 ar 물체들을 보여줄 수 있는 뷰이다.

      이 뷰에는 여러 ar 물체들을 넣어서 우리가 보는 뷰를 다채롭게 할 수가 있다.
      예를 들어 처음에 들어있는 앱 템플릿을 실행보면 이렇게 현실에서 이 scn을 볼 수가 있다.

       

      강의 내용

      이번 주에는 화면을 클릭했을 때 이벤트로 화면에서 출력하게 하는 내용을 많이 공부했던 것 같다. 이를 위해서는 tapGestureRecognizer를 사용해서 해결할 수 있었다.

      private func registerGestureRecognizers() {
      let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(tapped))
      self.sceneView.addGestureRecognizer(tapGestureRecognizer)
      }
      

      이 함수를 viewDidLoad 안에 넣어주면 우리의 앱에서 터치를 하면 이 tapped 함수를 실행을 시킬 수 있게 sceneView에 GestureRecognizer를 더해준다. 그러면 tapped에 원하는 함수를 입력하면 우리가 원하는 방향으로 앱을 개발할 수 있다.

      @objc func tapped(recognizer :UIGestureRecognizer) {
      
      let sceneView = recognizer.view as! ARSCNView
      let touch = recognizer.location(in: sceneView)
      
      let hitResults = sceneView.hitTest(touch, types: .existingPlaneUsingExtent)
      
      if !hitResults.isEmpty {
      
      guard let hitResult = hitResults.first else {
      return
      }
      
      addBench(hitResult :hitResult)
      }
      }
      
      

      예를 들어 위의 탭 함수처럼 만들 수 있는데 이 탭 함수 안에서도 AR을 사용하기 위한 과정이 들어가 있다.
      recognizer의 view를 찾고, touch에 recognizer의 위치를 받은 뒤, hitResult에 결과를 전달받는다.

      sceneView 내에서 HitTesting을 진행햘 때 recognizer의 위치인 touch와 hit Testing을 진행할 때 테스트 타입을 지정할 수 있는데, existingPlaneUsingExtent은 디바이스에서 나오는 감지한 면 안에서 터치할 때 결과를 반환하는 역할을 한다.
      처음엔 무슨 말인지 헷갈리고 어려우나 이 타입을 사용할 때라면 우리는 그 전에 카메라에 비치는 화면 내애서 어떤 plane, 즉 면을 감지했을 것이다. 그 plane을 감지하고, plane 내에서 gesTureRecognizer를 적용시키는 것이라고 보면 이해하기가 쉽다.

      다음주에는 앱 내에서 미사일 3D 객체를 화면 내에 보이게 하고, 터치를 했을 때 미사일이 발사되는 과정과, 화면에 목표물을 고정시키고, 화면을 터치할 때 총알을 쏘게 하는 앱을 포스팅하겠다.

      미사일발사

      후기

      scenekit으로 내가 보는 실제 화면에서 가상의 물체들이 존재할 수 있다는 것이 신기하다. 강의는 30강의 정도 있는 것 같으며 부지런히 들어서 완강하고 싶은 생각이 든다.
      + 부스트코스를 같이 공부하는 중인데 2,4,5 단원이 남았지만 그래도 프로젝트가 완성을 향해서 한발씩 가까워지고 있다. 더 힘내면 될듯하다!

      출처

      뉴스: https://news.joins.com/article/23567043
      udemy 강의: https://www.udemy.com/course/mastering-arkit-for-ios-using-swift/learn/lecture/7340874#overview

    • odyflame
      참가자
      • 글작성 : 17
      • 답글작성 : 21

      추가로 야곰스터디의 교재지원 덕분에 한번 읽어보고 싶었던 ios와 coreml 관련 서적 내용을 빼먹었네요
      구입해서 조금씩 읽고 있습니다! 물론 하루에 20장 읽기도 조금 버거울 정도로 어려운 내용이네요..
      제 수준에는 힘든 도전 같지만 재미있을것같아요!

    • 야곰
      키 마스터
      • 글작성 : 37
      • 답글작성 : 579

      많은 것을 하고 있네요!
      너무 불태우면 지칠수 있으니 쉬엄쉬엄 해보세요 ㅎㅎ
      화이팅입니다!

    • odyflame
      참가자
      • 글작성 : 17
      • 답글작성 : 21

      아직은 재미가 들어서 다 하고싶네요ㅋㅋㅋ
      언제 또 식어버릴지 모르니 해놓고 봐야한다는 마인드..

3 답변 글타래를 보이고 있습니다
  • 답변은 로그인 후 가능합니다.

logo landscape small

사업자번호 : 743-81-02195
통신판매업 신고번호 : 제 2022-충북청주-1278 호
고객센터 : 카카오톡채널 @yagom