Jetpack XR용 ARCore는 사용자 환경에서 평평한 표면을 감지하고 포즈, 크기, 방향과 같은 정보를 제공할 수 있습니다. 이렇게 하면 앱에서 객체를 배치할 테이블과 같은 표면을 찾을 수 있습니다.
Jetpack XR용 ARCore 세션 만들기
Jetpack XR 세션을 위한 ARCore를 통해 평면 정보에 액세스합니다. Session
를 가져오려면 세션의 수명 주기 이해하기를 참고하세요.
세션 구성
평면 감지는 XR 세션에서 기본적으로 사용 설정되지 않습니다. 평면 추적을 사용 설정하려면 세션을 구성하고 PlaneTrackingMode.HORIZONTAL_AND_VERTICAL
모드를 설정합니다.
val newConfig = session.config.copy( planeTracking = Config.PlaneTrackingMode.HORIZONTAL_AND_VERTICAL, ) when (val result = session.configure(newConfig)) { is SessionConfigureConfigurationNotSupported -> TODO(/* Some combinations of configurations are not valid. Handle this failure case. */) is SessionConfigureSuccess -> TODO(/* Success! */) else -> TODO(/* A different unhandled exception was thrown. */) }
인식된 평면의 상태 가져오기
Jetpack XR용 ARCore는 평면의 상태를 내보내는 StateFlow
를 통해 평면의 상태를 제공합니다. 세션에서 평면에 구독하면 평면이 추가, 업데이트 또는 삭제될 때 앱에 알림이 전송됩니다.
Plane.subscribe(session).collect { planes -> // Planes have changed; update plane rendering }
평면에는 다음과 같은 속성이 있습니다.
label
: 지정된Plane
의 시맨틱 설명입니다.WALL
,FLOOR
,CEILING
또는TABLE
일 수 있습니다.centerPose
: 감지된 평면의 중심 포즈입니다.extents
: 감지된 평면의 크기(미터)입니다.vertices
: 평면을 근사하는 볼록 다각형의 꼭짓점 목록입니다.
평면에 대한 히트 테스트 실행
히트 테스트는 광선과 세션에서 추적하는 객체의 교차점을 계산하는 방법입니다. 히트 테스트의 일반적인 적용 사례는 테이블을 가리키고 해당 위치에 객체를 배치하는 것입니다. 히트 테스트를 실행하면 히트 객체 목록이 생성됩니다. 즉, 히트 테스트는 첫 번째 객체 히트에서 중지되지 않습니다. 하지만 특정 유형의 첫 번째 객체 조회만 필요한 경우가 많습니다.
히트 테스트를 실행하려면 Ray
와 함께 Interaction.hitTest()
를 사용하세요.
val results = androidx.xr.arcore.hitTest(session, ray) // When interested in the first Table hit: val tableHit = results.firstOrNull { val trackable = it.trackable trackable is Plane && trackable.state.value.label == Plane.Label.TABLE }