본문 바로가기
iOS/Graphics and Games

[ARKit]Ray-Casting

by 탄이. 2020. 6. 21.

Ray-Casting and Hit-Testing

 

Raycasting and Hit-Testing | Apple Developer Documentation

Raycasting and Hit-Testing Find points on real-world surfaces given a screen location. OverviewRaycasting is the preferred method for finding positions on surfaces in the real-world environment, but the hit-testing functions remain present for compatibilit

developer.apple.com

ARRaycastQuery

실제 세계의 표면에서 3D 위치를 찾는 데 사용하는 수학적 광선.

개요

  • 3D 벡터와 시작 위치를 제공하여 레이 캐스트 쿼리를 만듭니다
  • 사용자로부터 z-방향으로 바깥쪽으로 향하는 2D 화면 위치 및 기본 벡터를 사용하여 레이 캐스트 쿼리를 만들려면, [ARView](https://developer.apple.com/documentation/realitykit/arview)에 있는 [makeRaycastQuery(from:allowing:alignment:)](https://developer.apple.com/documentation/realitykit/arview/3255315-makeraycastquery) 혹은 ARSCNView에 있는 raycastQuery(from:allowing:alignment:) 편의 함수를 사용하세요.

Raycast 쿼리 생성

  • init(origin:direction:allowing:alignment:)

    • origin: simd_float3

      • 레이의 시작점을 설명하는 3D 위치입니다.
    • direction: simd_float3

      • 레이의 방향을 설명하는 3D 벡터입니다.
    • allowing: ARRaycastQuery.Target

      • 레이캐스트를 교차할 수 있는 평면 유형입니다.
    • alignment: ARRaycastQuery.TargetAlignment

      • 레이캐스트가 교차 할 수 있도록하는 중력에 대한 대상의 정렬입니다.

      simd_float3 : 32비트 단일 정밀도 값의 벡터.

    • 이것은 3D 시작 장소와 벡터를 공급하여 레이캐스트 쿼리를 생성한다. 화면 점과 사용자로부터 바깥쪽을 가리키는 벡터를 사용하여 레이캐스트 쿼리를 얻으려면 ARSCNView에서 raycastQuery(from:allowing:alignment:) 를 호출하십시오.

target 얻기

target: ARRaycastQuery.Target

  • 레이가 마주치면 종료를 허용하는 평면 유형.
  • 이용 가능한 대상 유형은 평면, 무한 평면 및 추정 평면이다.

ARRaycastQuery.Target

레이캐스트와 교차할 수 있는 평면 유형.

  • estimatedPlane
    • 평면을 받아들이는 ARKit이 덜 확신하는 레이캐스트 대상. (?)
    • 이 타겟이 있는 레이캐스트는 ARKit이 평면으로 추정 할 수있는 광선 주변의 특징점과 교차 할 수 있습니다.
    • ARRaycastQuery.TargetAlignment.any와 결합하면 추정 평면 정렬은 추정 평면에 해당하는 보통의 실제 세계 표면을 기반으로 합니다.
  • existingPlaneGeometry
    • 평면에 명확한 크기와 모양이 필요한 레이캐스트 대상.
  • existingPlaneInfinite
    • 크기와 모양에 관계없이 탐지된 평면을 지정하는 레이캐스트 대상.

targetAlignment: ARRaycastQuery.TargetAlignment

  • 중력에 대한 대상의 정렬.
  • 사용 가능한 옵션은 가로, 세로 또는 모두입니다.

ARRaycastQuery.TargetAlignment

중력에 대한 대상의 정렬을 나타내는 설명

  • any
    • 대상이 중력과 관련하여 어떤 방식으로든 정렬될 수 있음을 나타낸다.
  • horizontal
    • 대상이 중력에 대해 수평으로 정렬되어 있음을 표시한다.
  • vertical
    • 대상이 중력에 대해 수직으로 정렬되어 있음을 표시한다.

레이 해석

  • direction: simd_float3
    • 3D 공간에서 광선의 궤적을 설명하는 벡터입니다.
  • origin: simd_float3
    • 광선의 시작 위치를 정의하는 3D 좌표입니다.

ARTrackedRaycast

ARKit이 연속적으로 반복하여 시간이 지남에 따라 정교한 결과를 제공하는 레이캐스트 쿼리

개요

  • Tracked Ray-Casting은 연속적으로 3D 위치에 대한 쿼리를 반복함으로써 hit-testing 기술을 개선한다. ARKit은 시간이 지남에 따라 세계에 대한 이해를 새롭게 하는 새로운 위치를 제공한다.
  • Tracked 레이캐스트를 시작하려면 앱의 현재 ARSession에서 trackedRaycast(_:updateHandler:)를 호출합니다.

트래킹 중지

  • stopTracking()
    • 레이 캐스트 쿼리 반복을 중지합니다.
    • 추적 된 레이 캐스트는 stopTracking()을 호출하여 명시 적으로 중지 할 때까지 지속적으로 업데이트됩니다. 다음과 같은 경우 레이 캐스트가 자동으로 중지됩니다.
      • ARKit이 sessionWasInterrupted(_:)를 호출할 때
      • 세션의 구성을 변경할 때
      • ARTrackedRaycast 의 할당을 해제할 때
      • update(_:)를 사용하여 제공 한 쿼리가 실패할 때

ARRaycastResult

화면의 한 지점을 검사하여 발견한 실제 지표면에 대한 정보

개요

  • RealityKit 또는 SceneKit을 렌더러로 사용하는 경우 ARSCNViewraycastQuery(from:allowing:alignment:) 함수를 사용하여 스크린 포인트에서 실제 표면을 검색 할 수 있습니다.
  • 사용자 지정 렌더러를 사용하는 경우 다음과 함께 화면 지점을 사용하여 실제 위치를 찾을 수 있음:
    • ARFrameraycastQuery(from:allowing:alignment:) 함수
    • ARSessionraycast(_:) 함수
  • 추적된 레이캐스팅의 경우, 앱의 현재 ARSession에서 trackedRaycast(_:updateHandler:)로 호출하십시오.

결과 식별

worldTransform: simd_float4x4

  • 레이가 대상과 교차하는 위치, 회전 및 배율입니다.

simd_float4x4 : 단일 정밀도 값을 포함하는 4개의 열과 4개의 행의 행렬.

단정도(single precision), 배정도(double precision)이란?

 

단정도(single precision), 배정도(double precision)이란?

부동소수점 개요 처음 C언어를 공부할 때 가장 어리둥절했던 부분이 이 부분인 듯 하다. 처음에는 왜 이걸 배우지? 라는 생각을 했지만 컴퓨터구조론에서 컴퓨터가 실수를 다루는 방식에 대해서

whatisthenext.tistory.com

anchor

  • 선이 교차하는 평면의 앵커.

target: ARRaycastQuery.Target

targetAlignment: ARRaycastQuery.TargetAlignment

댓글