HoloLens에서 벽, 바닥, 책상, 천장 분류하기

소개



3월 초부터 인턴에서 주식회사 유메미(htps //w w. 유메미. 이. jp/그럼 )에서 HoloLens의 연구 개발을 하고 있는 근대생의 요시입니다.
국내에서 지난 1월부터 제공을 개시한 MicroSoft제 MR 디바이스의 HoloLens에 대한 기사를 써 갑니다.

「HoloLens+타사제의 외부 입력」이나 「움직임을 3D 모델로 해 전달」등, 여러분들이 재미있는 시도를 많이 시험되고 있습니다만, HoloLens 개발의 기본적 부분의 기사가 그다지 없었기 때문에, 그것을 메인에 써 가려고 생각합니다.

하는 것



평면을 벽, 바닥, 책상, 천장으로 분류

생성하는 객체를 Gaze가 맞는 평면의 종류에 따라 변경하고 싶습니다.
라고 할 때 등에 사용할 수 있다고 생각합니다.

전제 환경


  • Version: Windows Holographic
  • OS Build: 10.0.14393.953
  • HoloLens 개발 환경 설정
  • Unity 개발
  • HoloToolkit-Unity 사용
  • HoloLens 개발의 기본 용어
  • PlaySpaceManager(Holographic Academy 230에서 나온다)의 이용으로, 메쉬를 제거한 평면으로 변환이 되어 있다.

  • Physics.Raycast() 사용



    Raycast는 오브젝트의 충돌을 판정할 수 있는 것으로, 이번 사용하는 것은 이하의 인수를 취합니다.
    - origin: 월드 좌표에서 레이의 시작 지점
    - direction: 레이 방향
    - maxdistance: 레이가 충돌을 감지하는 최대 거리
    - layerMask: 레이캐스트 시 선택적으로 충돌을 무시하는 데 사용

    구현 예



    RecognizePlane
    RaycastHit hitInfo;
    
    bool hit = Physics.Raycast(GazeManager.Instance.GazeOrigin,
    GazeManager.Instance.GazeNormal, out hitInfo, 20f, SpatialMappingManager.Instance.LayerMask);
        if (hit) {
            GameObject surface = hitInfo.transform.gameObject;
            SurfacePlane plane = surface.GetComponent<SurfacePlane>();
            if (plane != null) {
                switch (plane.PlaneType) {
                    case PlaneTypes.Floor:
                        //Do somothing
                        break;
                    case PlaneTypes.Ceiling:
                        //Do somothing
                        break;
                    case PlaneTypes.Wall:
                        //Do somothing
                        break;
                    case PlaneTypes.Table:
                        //Do somothing
                        break;
                    case PlaneTypes.Unknown:
                        //Do somothing
                        break;
                }
            }
        }
    

    해설



  • GazeManager.Instance.GazeOrigin: 시선의 좌표를 가져옵니다

  • GazeManager.Instance.GazeNormal: 시선의 forword 얻기

  • out hitInfo: 충돌 판정이 있었던 평면을 취득

  • layerMask: 특히 중요한 포인트! SpatialMappingManager.Instance.LayerMask의 값을 사용해 공간 매핑 오브젝트 이외가 반응하지 않게 설정하고 있다.

  • HolotoolKit의 기본값은 다음과 같이 레이어 마스크를 31로 설정합니다.


    hitoInfo의 transform.gameobject를 surface로 얻고,
    surface에 연결된 SurfacePlane 구성 요소를 plane으로 가져옵니다.
    이렇게 하면 plane.PlaneType으로 평면 유형을 분류할 수 있습니다.

    참고



    RayCast 그 2, 충돌하는 오브젝트의 제한【Unity】
    h tp // 칸-키쿠치. 하테나 bぉg. 코 m / 엔트리 / 라 y 또는 st2

    Holographic academy Holograms230
    htps : //에서 ゔぇぺぺr. 미 c 로소 ft. 코 m / 엔 우 s / 우 엔드 ws / 호 g 등 p 히 c / 호 g 등 ms_230

    좋은 웹페이지 즐겨찾기