XR_ANDROID_depth_texture
이름 문자열
XR_ANDROID_depth_texture
확장 프로그램 유형
인스턴스 확장
등록된 내선 번호
703
버전
1
비준 상태
비준되지 않음
확장 프로그램 및 버전 종속 항목
최종 수정일
2024-09-11
IP 상태
알려진 IP 소유권 주장이 없습니다.
도움을 주신 분들
Sushant Kulkarni, Google
Cairn Overturf, Google
Spencer Quin, Google
Levana Chen, Google
개요
이 확장 프로그램을 사용하면 애플리케이션이 헤드셋 주변의 실제 환경의 깊이 지도를 요청하고 생성 시 지원되는 깊이 해상도를 쿼리할 수 있습니다.
이 확장 프로그램은 폐색, Hit Test, 정확한 장면 지오메트리를 활용하는 기타 특정 태스크(예: 위조 얼굴 인식)를 위해 RAW 깊이와 부드러운 깊이를 노출하기 위한 것입니다.
참고
깊이 지도는 런타임에 의해 생성되고 XrDepthSwapchainANDROID를 사용하여 애플리케이션과 공유됩니다 . 런타임은 애플리케이션의 전체 기간 동안 xrEnumerateDepthResolutionsANDROID를 통해 반환된 깊이 이미지 해상도를 변경하면 안 됩니다.
권한
이 확장 프로그램은 개인 식별 정보 (PII) 문제를 완화하기 위해 다운샘플링된 깊이 텍스처를 노출합니다. 이 확장 프로그램은 환경의 지오메트리를 노출하므로 Android 애플리케이션은 매니페스트에 android.permission.SCENE_UNDERSTANDING_FINE 권한이 나열되어 있어야 합니다. android.permission.SCENE_UNDERSTANDING_FINE 권한은 위험한 권한으로 간주됩니다. 애플리케이션은 다음 기능을 사용하기 위해 런타임에 권한을 요청해야 합니다.
(보호 수준: 위험)
시스템 기능 검사
XrSystemDepthTrackingPropertiesANDROID 구조는 다음과 같이 정의됩니다.
typedef struct XrSystemDepthTrackingPropertiesANDROID {
XrStructureType type;
void* next;
XrBool32 supportsDepthTracking;
} XrSystemDepthTrackingPropertiesANDROID;
회원 설명
type은 이 구조의 XrStructureType입니다.next는NULL이거나 구조체 체인의 다음 구조체에 대한 포인터입니다. 이러한 구조는 핵심 OpenXR이나 이 확장 프로그램에 정의되어 있지 않습니다.supportsDepthTracking는 현재 시스템이 깊이 추적을 지원하는지 나타내는XrBool32입니다.
애플리케이션은 xrGetSystemProperties를 호출할 때 XrSystemDepthTrackingPropertiesANDROID 구조로 XrSystemProperties를 확장하여 시스템이 깊이 추적을 지원하는지 검사할 수 있습니다 .
런타임이 supportsDepthTracking에 대해 XR_FALSE을 반환하는 경우에만 런타임은 xrCreateDepthSwapchainANDROID에서 XR_ERROR_FEATURE_UNSUPPORTED을 반환해야 합니다 .
유효한 사용 (암시적)
- XrSystemDepthTrackingPropertiesANDROID를 사용하기 전에
XR_ANDROID_depth_texture확장 프로그램을 사용 설정해야 합니다. -
type은XR_TYPE_SYSTEM_DEPTH_TRACKING_PROPERTIES_ANDROID이어야 합니다. -
next은NULL이거나 구조 체인의 다음 구조를 가리키는 유효한 포인터여야 합니다.
쿼리 심도 해결
xrEnumerateDepthResolutionsANDROID 함수는 다음과 같이 정의됩니다.
XrResult xrEnumerateDepthResolutionsANDROID(
XrSession session,
uint32_t resolutionCapacityInput,
uint32_t* resolutionCountOutput,
XrDepthCameraResolutionANDROID* resolutions);
매개변수 설명
session는 지원되는 깊이 해상도를 열거하는 XrSession입니다.resolutionCapacityInput는resolutions의 용량입니다. 필요한 용량을 가져오려면 0을 사용하세요.resolutionCountOutput는 작성된uint64_tresolutions의 개수를 가리키는 포인터이거나resolutionCapacityInput가 부족한 경우 필요한 용량을 가리키는 포인터입니다.resolutions는 XrDepthCameraResolutionANDROID 배열의 포인터이지만resolutionCapacityInput이0인 경우NULL일 수 있습니다.- 필요한
resolutions크기를 가져오는 방법에 관한 자세한 설명은 버퍼 크기 매개변수 섹션을 참고하세요.
xrEnumerateDepthResolutionsANDROID는 현재 세션에서 지원하는 깊이 해상도를 열거합니다. 깊이 해상도는 런타임 선호도가 가장 높은 것부터 가장 낮은 것 순으로 해야 합니다. 애플리케이션은 최적의 성능과 품질을 위해 지원하는 가장 높은 환경설정을 사용해야 합니다.
런타임은 세션 수명 동안 이 열거형에서 항상 동일한 버퍼 콘텐츠를 반환해야 합니다.
유효한 사용 (암시적)
- xrEnumerateDepthResolutionsANDROID를 호출하기 전에
XR_ANDROID_depth_texture확장 프로그램을 사용 설정해야 합니다. -
session은 유효한 XrSession 핸들이어야 합니다. -
resolutionCountOutput은uint32_t값에 대한 포인터여야 합니다. -
resolutionCapacityInput이0이 아닌 경우resolutions은resolutionCapacityInputXrDepthCameraResolutionANDROID 값의 배열에 대한 포인터여야 합니다.
반환 코드
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_VALIDATION_FAILURE
XrDepthCameraResolutionANDROID 열거형은 XrDepthSwapchainANDROID를 만들 때 지원되는 깊이 해상도를 설명합니다 .
typedef enum XrDepthCameraResolutionANDROID {
XR_DEPTH_CAMERA_RESOLUTION_80x80_ANDROID = 0,
XR_DEPTH_CAMERA_RESOLUTION_160x160_ANDROID = 1,
XR_DEPTH_CAMERA_RESOLUTION_320x320_ANDROID = 2,
XR_DEPTH_CAMERA_RESOLUTION_MAX_ENUM_ANDROID = 0x7FFFFFFF
} XrDepthCameraResolutionANDROID;
열거자 설명
XR_DEPTH_CAMERA_RESOLUTION_80x80_ANDROID- 깊이 및 신뢰도 이미지의 해상도는 80x80입니다.XR_DEPTH_CAMERA_RESOLUTION_160x160_ANDROID— 깊이 및 신뢰도 이미지의 해상도는 160x160입니다.XR_DEPTH_CAMERA_RESOLUTION_320x320_ANDROID— 깊이 및 신뢰도 이미지의 해상도는 320x320입니다.
깊이 스왑체인 만들기
XR_DEFINE_HANDLE(XrDepthSwapchainANDROID)
XrDepthSwapchainANDROID는 깊이 스왑체인 핸들입니다.
xrCreateDepthSwapchainANDROID 함수는 다음과 같이 정의됩니다.
XrResult xrCreateDepthSwapchainANDROID(
XrSession session,
const XrDepthSwapchainCreateInfoANDROID* createInfo,
XrDepthSwapchainANDROID* swapchain);
매개변수 설명
session은 깊이 스왑체인을 만드는 XrSession입니다.createInfo는 스왑체인을 만드는 데 사용되는 매개변수가 포함된 XrDepthSwapchainCreateInfoANDROID 구조체에 대한 포인터입니다.swapchain은 생성된 XrDepthSwapchainANDROID가 반환되는 핸들의 포인터입니다.
애플리케이션은 xrCreateDepthSwapchainANDROID 함수를 사용하여 깊이와 신뢰도 이미지를 모두 관리하는 깊이 스왑체인을 만들 수 있습니다.
- 시스템에서 깊이 추적을 지원하지 않는 경우 런타임은
XR_ERROR_FEATURE_UNSUPPORTED를 반환해야 합니다. - 필요한 권한이 호출 앱에 부여되지 않은 경우 런타임은
XR_ERROR_PERMISSION_INSUFFICIENT를 반환해야 합니다. - 런타임은 XrDepthSwapchainCreateInfoANDROID에 지정된 깊이 해상도가 지원되지 않으면
XR_ERROR_VALIDATION_FAILURE를 반환해야 합니다. - 런타임은 스왑체인 생성 시
createInfo에 해당하는 비트가 설정된 경우에만 깊이 신뢰도 이미지를 생성해야 합니다.
반환된 깊이 스왑체인 핸들은 이후 API 호출에서 사용할 수 있습니다. XrDepthSwapchainANDROID 핸들은 결국 xrDestroyDepthSwapchainANDROID 함수를 통해 해제해야 합니다.
유효한 사용 (암시적)
- xrCreateDepthSwapchainANDROID를 호출하기 전에
XR_ANDROID_depth_texture확장 프로그램을 사용 설정해야 합니다. -
session은 유효한 XrSession 핸들이어야 합니다. -
createInfo는 유효한 XrDepthSwapchainCreateInfoANDROID 구조체를 가리키는 포인터여야 합니다. -
swapchain은 XrDepthSwapchainANDROID 핸들에 대한 포인터여야 합니다.
반환 코드
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FEATURE_UNSUPPORTEDXR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_LIMIT_REACHEDXR_ERROR_OUT_OF_MEMORYXR_ERROR_PERMISSION_INSUFFICIENTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOST
XrDepthSwapchainCreateInfoANDROID 구조체는 다음과 같이 정의됩니다.
typedef struct XrDepthSwapchainCreateInfoANDROID {
XrStructureType type;
const void* next;
XrDepthCameraResolutionANDROID resolution;
XrDepthSwapchainCreateFlagsANDROID createFlags;
} XrDepthSwapchainCreateInfoANDROID;
회원 설명
type은 이 구조의 XrStructureType입니다.next는NULL이거나 구조체 체인의 다음 구조체에 대한 포인터입니다. 이러한 구조는 핵심 OpenXR이나 이 확장 프로그램에 정의되어 있지 않습니다.resolution는 깊이 및 신뢰도 텍스처가 생성되는 XrDepthCameraResolutionANDROID입니다.createFlags는 하나 이상의 XrDepthSwapchainCreateFlagsANDROID입니다 .
XrDepthSwapchainCreateInfoANDROID 구조체는 xrCreateDepthSwapchainANDROID에 전달될 때 XrDepthSwapchainANDROID의 생성 옵션을 제공합니다 .
유효한 사용 (암시적)
- XrDepthSwapchainCreateInfoANDROID를 사용하기 전에
XR_ANDROID_depth_texture확장 프로그램을 사용 설정해야 합니다. -
type은XR_TYPE_DEPTH_SWAPCHAIN_CREATE_INFO_ANDROID이어야 합니다. -
next은NULL이거나 구조 체인의 다음 구조를 가리키는 유효한 포인터여야 합니다. -
resolution은 유효한 XrDepthCameraResolutionANDROID 값이어야 must 합니다. -
createFlags은 XrDepthSwapchainCreateFlagBitsANDROID 값의 유효한 조합이어야 must 합니다. -
createFlags은0이 아니어야 합니다.
XrDepthSwapchainCreateFlagsANDROID는 XrDepthSwapchainANDROID의 생성 옵션을 지정합니다 .
typedef XrFlags64 XrDepthSwapchainCreateFlagsANDROID;
XrDepthSwapchainCreateFlagsANDROID의 유효한 비트는 XrDepthSwapchainCreateFlagBitsANDROID로 정의되며 , 이는 다음과 같이 지정됩니다.
// Flag bits for XrDepthSwapchainCreateFlagsANDROID
static const XrDepthSwapchainCreateFlagsANDROID XR_DEPTH_SWAPCHAIN_CREATE_SMOOTH_DEPTH_IMAGE_BIT_ANDROID = 0x00000001;
static const XrDepthSwapchainCreateFlagsANDROID XR_DEPTH_SWAPCHAIN_CREATE_SMOOTH_CONFIDENCE_IMAGE_BIT_ANDROID = 0x00000002;
static const XrDepthSwapchainCreateFlagsANDROID XR_DEPTH_SWAPCHAIN_CREATE_RAW_DEPTH_IMAGE_BIT_ANDROID = 0x00000004;
static const XrDepthSwapchainCreateFlagsANDROID XR_DEPTH_SWAPCHAIN_CREATE_RAW_CONFIDENCE_IMAGE_BIT_ANDROID = 0x00000008;
플래그 설명
XR_DEPTH_SWAPCHAIN_CREATE_SMOOTH_DEPTH_IMAGE_BIT_ANDROID- 스왑체인이 부드러운 깊이 이미지를 제공함을 나타냅니다.XR_DEPTH_SWAPCHAIN_CREATE_SMOOTH_CONFIDENCE_IMAGE_BIT_ANDROID- 스왑체인이 부드러운 깊이 신뢰도 이미지를 제공함을 나타냅니다.XR_DEPTH_SWAPCHAIN_CREATE_RAW_DEPTH_IMAGE_BIT_ANDROID- 스왑체인이 원시 깊이 이미지를 제공함을 나타냅니다.XR_DEPTH_SWAPCHAIN_CREATE_RAW_CONFIDENCE_IMAGE_BIT_ANDROID- 스왑체인이 원시 깊이 신뢰도 이미지를 제공함을 나타냅니다.
xrDestroyDepthSwapchainANDROID 함수는 다음과 같이 정의됩니다.
XrResult xrDestroyDepthSwapchainANDROID(
XrDepthSwapchainANDROID swapchain);
매개변수 설명
swapchain은 이전에 xrCreateDepthSwapchainANDROID로 만든 XrDepthSwapchainANDROID 핸들입니다 .
xrDestroyDepthSwapchainANDROID 함수는 깊이 스왑체인을 소멸합니다. 이 호출 후 런타임은 관련 메모리와 리소스를 모두 해제할 수 있습니다.
유효한 사용 (암시적)
- xrDestroyDepthSwapchainANDROID를 호출하기 전에
XR_ANDROID_depth_texture확장 프로그램을 사용 설정해야 합니다. -
swapchain은 유효한 XrDepthSwapchainANDROID 핸들이어야 합니다(must).
스레드 안전
swapchain및 모든 하위 핸들에 대한 액세스는 외부에서 동기화해야 합니다.
반환 코드
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALID
깊이 텍스처 액세스
xrEnumerateDepthSwapchainImagesANDROID 함수는 다음과 같이 정의됩니다.
XrResult xrEnumerateDepthSwapchainImagesANDROID(
XrDepthSwapchainANDROID depthSwapchain,
uint32_t depthImageCapacityInput,
uint32_t* depthImageCountOutput,
XrDepthSwapchainImageANDROID* depthImages);
매개변수 설명
depthSwapchain은 이미지를 가져올 XrDepthSwapchainANDROID입니다.depthImageCapacityInput는depthImages배열의 용량입니다. 필요한 용량을 가져오기 위한 요청을 나타내는 0일 수도 있습니다.depthImageCountOutput는 기록된depthImages의 개수를 가리키는 포인터이거나depthImageCapacityInput가 부족한 경우 필요한 용량을 가리키는 포인터입니다.depthImages은 XrDepthSwapchainImageANDROID 구조의 배열에 대한 포인터입니다.depthImageCapacityInput이 0인 경우NULL일 수 있습니다.- 필요한
depthImages크기를 가져오는 방법에 관한 자세한 설명은 버퍼 크기 매개변수 섹션을 참고하세요.
xrEnumerateDepthSwapchainImagesANDROID는 XrDepthSwapchainImageANDROID 구조의 배열을 채웁니다. 리소스는 XrDepthSwapchainANDROID의 수명 동안 일정하고 유효해야 합니다 . 이 함수는 xrEnumerateSwapchainImages와 유사하게 동작합니다 .
런타임은 스왑체인의 수명 동안 이 열거형에서 항상 동일한 버퍼 콘텐츠를 반환해야 합니다.
유효한 사용 (암시적)
- xrEnumerateDepthSwapchainImagesANDROID를 호출하기 전에
XR_ANDROID_depth_texture확장 프로그램을 사용 설정해야 합니다. -
depthSwapchain은 유효한 XrDepthSwapchainANDROID 핸들이어야 합니다(must). -
depthImageCountOutput은uint32_t값에 대한 포인터여야 합니다. -
depthImageCapacityInput이0이 아닌 경우depthImages은depthImageCapacityInputXrDepthSwapchainImageANDROID 구조의 배열을 가리키는 포인터여야 must 합니다.
반환 코드
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_VALIDATION_FAILURE
XrDepthSwapchainImageANDROID 구조체는 다음과 같이 정의됩니다.
typedef struct XrDepthSwapchainImageANDROID {
XrStructureType type;
void* next;
const float* rawDepthImage;
const uint8_t* rawDepthConfidenceImage;
const float* smoothDepthImage;
const uint8_t* smoothDepthConfidenceImage;
} XrDepthSwapchainImageANDROID;
회원 설명
type은 이 구조의 XrStructureType입니다.next는NULL이거나 구조체 체인의 다음 구조체에 대한 포인터입니다. 이러한 구조는 핵심 OpenXR이나 이 확장 프로그램에 정의되어 있지 않습니다.rawDepthImage는NULL이거나 런타임에서 할당한 왼쪽 및 오른쪽 뷰의 원시 깊이 이미지 포인터입니다. 값의 단위는 미터입니다. 특수 값:0.0는 원시 깊이에서 유효하지 않거나 비어 있는 깊이 픽셀을 나타내고,Inf는 사실상 무한히 먼 것으로 알려진 깊이를 나타냅니다.rawDepthConfidenceImage는NULL이거나 런타임에서 할당한 왼쪽 및 오른쪽 뷰의 원시 깊이 신뢰도 이미지 포인터입니다.smoothDepthImage는NULL이거나 런타임에서 할당한 왼쪽 및 오른쪽 뷰의 부드러운 깊이 이미지 포인터입니다. 값의 단위는 미터입니다. 특수 값:0.0는 부드러운 깊이에서 유효하지 않거나 비어 있는 깊이 픽셀을 나타내고,Inf는 사실상 무한히 먼 것으로 알려진 깊이를 나타냅니다.smoothDepthConfidenceImage는NULL이거나 런타임에서 할당한 왼쪽 및 오른쪽 뷰의 부드러운 깊이 신뢰도 이미지 포인터입니다.
이미지 버퍼 포인터는 스왑체인의 수명 동안에만 유효합니다. 스왑체인이 삭제되면 포인터가 매달린 것으로 간주됩니다.
XrDepthSwapchainImageANDROID는 xrCreateDepthSwapchainANDROID를 호출하는 동안 XrDepthSwapchainCreateInfoANDROID :: resolution 및 XrDepthSwapchainCreateInfoANDROID :: createFlags에 설명된 대로 할당된 읽을 수 있는 XrDepthSwapchainANDROID의 깊이 이미지를 나타냅니다 . 각 깊이 이미지의 경우:
- 이미지 값은 행 사이에 패딩이 없이 행 우선 순서로 메모리에 배치됩니다.
- 첫 번째 값은 왼쪽 상단이고 마지막 값은 오른쪽 하단입니다.
- 가리키는 메모리의 크기는 xrEnumerateDepthSwapchainImagesANDROID 값에 따라 결정되고 xrCreateDepthSwapchainANDROID를 호출하는 동안 XrDepthSwapchainCreateInfoANDROID ::
resolution에 의해 설정됩니다 . 예를 들어 XrDepthSwapchainCreateInfoANDROID ::resolution이XR_DEPTH_CAMERA_RESOLUTION_160x160_ANDROID이면 깊이 이미지의 크기는2*160*160*sizeof(float)입니다 . - XrDepthSwapchainCreateInfoANDROID ::
createFlags에XR_DEPTH_SWAPCHAIN_CREATE_RAW_DEPTH_IMAGE_BIT_ANDROID이 포함되지 않은 경우rawDepthImage의 값은NULL이어야 합니다 . - XrDepthSwapchainCreateInfoANDROID ::
createFlags에XR_DEPTH_SWAPCHAIN_CREATE_RAW_CONFIDENCE_IMAGE_BIT_ANDROID이 포함되지 않은 경우rawDepthConfidenceImage의 값은NULL이어야 합니다 . - XrDepthSwapchainCreateInfoANDROID ::
createFlags에XR_DEPTH_SWAPCHAIN_CREATE_SMOOTH_DEPTH_IMAGE_BIT_ANDROID이 포함되지 않은 경우smoothDepthImage의 값은NULL이어야 합니다 . - XrDepthSwapchainCreateInfoANDROID ::
createFlags에XR_DEPTH_SWAPCHAIN_CREATE_SMOOTH_CONFIDENCE_IMAGE_BIT_ANDROID이 포함되지 않은 경우smoothDepthImage의 값은NULL이어야 합니다 .
유효한 사용 (암시적)
-
XR_ANDROID_depth_texture확장 프로그램은 XrDepthSwapchainImageANDROID를 사용하기 전에 사용 설정해야 합니다. -
type은XR_TYPE_DEPTH_SWAPCHAIN_IMAGE_ANDROID이어야 합니다. -
next은NULL이거나 구조 체인의 다음 구조를 가리키는 유효한 포인터여야 합니다.
xrAcquireDepthSwapchainImagesANDROID 함수는 다음과 같이 정의됩니다.
XrResult xrAcquireDepthSwapchainImagesANDROID(
XrDepthSwapchainANDROID depthSwapchain,
const XrDepthAcquireInfoANDROID* acquireInfo,
XrDepthAcquireResultANDROID* acquireResult);
매개변수 설명
depthSwapchain은 깊이 이미지의 XrDepthSwapchainANDROID 핸들입니다.acquireInfo는 깊이 이미지를 획득하는 방법에 관한 정보가 포함된 XrDepthAcquireInfoANDROID입니다.acquireResult는 획득한 깊이 이미지에 관한 정보가 포함된 반환된 XrDepthAcquireResultANDROID입니다.
애플리케이션은 xrAcquireDepthSwapchainImagesANDROID 함수를 사용하여 xrEnumerateDepthSwapchainImagesANDROID로 열거된 XrDepthSwapchainImageANDROID 배열에 사용 가능한 최신 스왑체인 이미지 색인(즉, XrDepthAcquireResultANDROID :: acquiredIndex)을 획득할 수 있습니다. 반환된 XrDepthAcquireResultANDROID에는 깊이 데이터를 해석하는 데 필요한 시야 및 포즈와 같은 기타 정보도 포함됩니다. 다음 xrAcquireDepthSwapchainImagesANDROID 호출까지 이미지 배열에서 획득한 슬롯을 읽어도 안전합니다 .
세션에서 xrBeginFrame 및 xrEndFrame 호출 쌍 사이에 xrAcquireDepthSwapchainImagesANDROID 호출이 두 번 이상 있으면 안 됩니다.
- 이전에 획득한 스왑체인 이미지가 런타임에서 계속 사용되는 경우 런타임이 차단될 수 있습니다.
- 런타임은 xrBeginFrame 전에 또는 xrEndFrame 후에 xrAcquireDepthSwapchainImagesANDROID가 호출되면
XR_ERROR_CALL_ORDER_INVALID를 반환해야 합니다 . - 런타임은 프레임당 두 번 이상, 즉 연결된 xrEndFrame이 없는 xrBeginFrame 호출 후 실행 중인 세션에서 xrAcquireDepthSwapchainImagesANDROID가 호출되면
XR_ERROR_LIMIT_REACHED를 반환해야 합니다. - 환경 깊이 데이터를 아직 사용할 수 없는 경우 런타임이
XR_ERROR_DEPTH_NOT_AVAILABLE_ANDROID를 반환할 수 있습니다. 이 경우 애플리케이션은 나중에 프레임에서 xrAcquireDepthSwapchainImagesANDROID를 다시 호출해야 합니다.
유효한 사용 (암시적)
-
XR_ANDROID_depth_texture확장 프로그램은 xrAcquireDepthSwapchainImagesANDROID를 호출하기 전에 사용 설정해야 합니다. -
depthSwapchain은 유효한 XrDepthSwapchainANDROID 핸들이어야 합니다(must). -
acquireInfo은 유효한 XrDepthAcquireInfoANDROID 구조체를 가리키는 포인터여야 합니다. -
acquireResult은 XrDepthAcquireResultANDROID 구조체에 대한 포인터여야 합니다.
반환 코드
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_CALL_ORDER_INVALIDXR_ERROR_DEPTH_NOT_AVAILABLE_ANDROIDXR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_LIMIT_REACHEDXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_TIME_INVALIDXR_ERROR_VALIDATION_FAILURE
XrDepthAcquireInfoANDROID 구조는 다음과 같이 정의됩니다.
typedef struct XrDepthAcquireInfoANDROID {
XrStructureType type;
const void* next;
XrSpace space;
XrTime displayTime;
} XrDepthAcquireInfoANDROID;
회원 설명
type은 이 구조의 XrStructureType입니다.next는NULL이거나 구조체 체인의 다음 구조체에 대한 포인터입니다. 이러한 구조는 핵심 OpenXR이나 이 확장 프로그램에 정의되어 있지 않습니다.space는 XrDepthAcquireResultANDROID ::views에서 반환된 포즈의 참조 프레임을 정의하는 XrSpace입니다 .displayTime는 XrDepthAcquireResultANDROID ::views에서 반환된 포즈의 포즈를 계산하는 데 사용된 시간을 지정하는XrTime입니다 . 애플리케이션은 현재 프레임의 예측 표시 시간을 전달해야 합니다.
유효한 사용 (암시적)
- XrDepthAcquireInfoANDROID를 사용하기 전에
XR_ANDROID_depth_texture확장 프로그램을 사용 설정해야 합니다. -
type은XR_TYPE_DEPTH_ACQUIRE_INFO_ANDROID이어야 합니다. -
next은NULL이거나 구조 체인의 다음 구조를 가리키는 유효한 포인터여야 합니다. -
space은 유효한 XrSpace 핸들이어야 합니다.
XrDepthAcquireResultANDROID 구조는 다음과 같이 정의됩니다.
typedef struct XrDepthAcquireResultANDROID {
XrStructureType type;
const void* next;
uint32_t acquiredIndex;
XrTime exposureTimestamp;
XrDepthViewANDROID views[2];
} XrDepthAcquireResultANDROID;
회원 설명
type은 이 구조의 XrStructureType입니다.next는NULL이거나 구조체 체인의 다음 구조체에 대한 포인터입니다. 이러한 구조는 핵심 OpenXR이나 이 확장 프로그램에 정의되어 있지 않습니다.acquiredIndex는 xrEnumerateDepthSwapchainImagesANDROID로 열거된 XrDepthSwapchainImageANDROID 배열에서 획득한 텍스처의 색인입니다 .exposureTimestamp는 깊이 맵이 캡처된 시간을 지정하는XrTime입니다.views는 두 개의 XrDepthViewANDROID 배열입니다. 각 눈에 하나씩 있으며 색인 0은 왼쪽 눈, 색인 1은 오른쪽 눈입니다.
유효한 사용 (암시적)
- XrDepthAcquireResultANDROID를 사용하기 전에
XR_ANDROID_depth_texture확장 프로그램을 사용 설정해야 합니다. -
type은XR_TYPE_DEPTH_ACQUIRE_RESULT_ANDROID이어야 합니다. -
next은NULL이거나 구조 체인의 다음 구조를 가리키는 유효한 포인터여야 합니다. -
views의 모든 요소는 유효한 XrDepthViewANDROID 구조여야 합니다.
XrDepthViewANDROID 구조는 다음과 같이 정의됩니다.
typedef struct XrDepthViewANDROID {
XrStructureType type;
const void* next;
XrFovf fov;
XrPosef pose;
} XrDepthViewANDROID;
회원 설명
type은 이 구조의 XrStructureType입니다.next는NULL이거나 구조체 체인의 다음 구조체에 대한 포인터입니다. 이러한 구조는 핵심 OpenXR이나 이 확장 프로그램에 정의되어 있지 않습니다.fov은 이 뷰를 생성하는 데 사용된 시야를 지정하는 XrFovf입니다. 뷰는 가로 또는 세로로 뒤집히지 않습니다.pose는 깊이 지도가 렌더링된 포즈를 지정하는 XrPosef입니다. 참조 프레임은 XrDepthAcquireInfoANDROID에 지정됩니다 .
유효한 사용 (암시적)
- XrDepthViewANDROID를 사용하기 전에
XR_ANDROID_depth_texture확장 프로그램을 사용 설정해야 합니다. -
type은XR_TYPE_DEPTH_VIEW_ANDROID이어야 합니다. -
next은NULL이거나 구조 체인의 다음 구조를 가리키는 유효한 포인터여야 합니다.
깊이 추적을 위한 예시 코드
다음 예시 코드에서는 깊이 이미지를 획득하고 깊이 값을 사용하여 깊이 이미지 좌표를 스테이지 공간에 매핑하는 방법을 보여줍니다.
XrInstance instance; // previously initialized
XrSystemId systemId; // previously initialized
XrSession session; // previously initialized
XrSpace stageSpace; // space created for XR_REFERENCE_SPACE_TYPE_STAGE.
// The function pointers are previously initialized using xrGetInstanceProcAddr.
PFN_xrCreateDepthSwapchainANDROID xrCreateDepthSwapchainANDROID; // previously initialized
PFN_xrDestroyDepthSwapchainANDROID xrDestroyDepthSwapchainANDROID; // previously initialized
PFN_xrEnumerateDepthSwapchainImagesANDROID xrEnumerateDepthSwapchainImagesANDROID; // previously initialized
PFN_xrEnumerateDepthResolutionsANDROID xrEnumerateDepthResolutionsANDROID; // previously initialized
PFN_xrAcquireDepthSwapchainImagesANDROID xrAcquireDepthSwapchainImagesANDROID; // previously initialized
float tanf(float);
// Inspect system capability
XrSystemProperties properties{XR_TYPE_SYSTEM_PROPERTIES};
XrSystemDepthTrackingPropertiesANDROID depthTrackingProperties{XR_TYPE_SYSTEM_DEPTH_TRACKING_PROPERTIES_ANDROID};
properties.next = &depthTrackingProperties;
CHK_XR(xrGetSystemProperties(instance, systemId, &properties));
if (!depthTrackingProperties.supportsDepthTracking) {
// depth tracking is not supported.
return;
}
// Query the supported depth resolution.
XrDepthCameraResolutionANDROID supportedDepthResolution;
uint32_t supportedResolutionCount = 0;
CHK_XR(xrEnumerateDepthResolutionsANDROID(
session, 1, &supportedResolutionCount, &supportedDepthResolution));
// Define metadata to access the raw and smooth depth along with confidences.
XrDepthSwapchainCreateInfoANDROID swapchainCreateInfo = {
.type = XR_TYPE_DEPTH_SWAPCHAIN_CREATE_INFO_ANDROID,
.next = nullptr,
// Use the resolution supported by the runtime.
.resolution = supportedDepthResolution,
.createFlags =
XR_DEPTH_SWAPCHAIN_CREATE_SMOOTH_DEPTH_IMAGE_BIT_ANDROID |
XR_DEPTH_SWAPCHAIN_CREATE_SMOOTH_CONFIDENCE_IMAGE_BIT_ANDROID |
XR_DEPTH_SWAPCHAIN_CREATE_RAW_DEPTH_IMAGE_BIT_ANDROID |
XR_DEPTH_SWAPCHAIN_CREATE_RAW_CONFIDENCE_IMAGE_BIT_ANDROID,
};
XrDepthSwapchainANDROID depthSwapchain;
CHK_XR(xrCreateDepthSwapchainANDROID(
session, &swapchainCreateInfo, &depthSwapchain));
// Enumerate depth images.
uint32_t imageCountOutput = 0;
CHK_XR(xrEnumerateDepthSwapchainImagesANDROID(
depthSwapchain, 0, &imageCountOutput, nullptr));
std::vector<XrDepthSwapchainImageANDROID> depthImages(imageCountOutput);
for (int i = 0; i < imageCountOutput; i++) {
depthImages[i].type = XR_TYPE_DEPTH_SWAPCHAIN_IMAGE_ANDROID;
}
CHK_XR(xrEnumerateDepthSwapchainImagesANDROID(
depthSwapchain, imageCountOutput, &imageCountOutput, depthImages.data()));
while (1) {
// ...
// For every frame in frame loop
// ...
XrFrameState frameState; // previously returned from xrWaitFrame
const XrTime time = frameState.predictedDisplayTime;
XrDepthAcquireInfoANDROID acquireInfo = {
.type = XR_TYPE_DEPTH_ACQUIRE_INFO_ANDROID,
.space = stageSpace,
.displayTime = time
};
XrDepthAcquireResultANDROID acquireResult = {
.type = XR_TYPE_DEPTH_ACQUIRE_RESULT_ANDROID,
};
CHK_XR(xrAcquireDepthSwapchainImagesANDROID(
depthSwapchain, &acquireInfo, &acquireResult));
// Each value in a depth image corresponds to a point in the real world.
// The sample code below shows how to find the stageSpace position of
// the point corresponding to a particular value in the depth image.
// For this sample code, assume we are using a right handed coordinate system
// with +X to the right, +Y up and -Z forward.
XrDepthSwapchainImageANDROID *image =
&depthImages[acquireResult.acquiredIndex];
// Assume supported resolution is XR_DEPTH_CAMERA_RESOLUTION_160x160_ANDROID.
const int imageResolution = 160;
int imageY = 80; // value in [0, imageResolution)
int imageX = 80; // value in [0, imageResolution)
// Get depth value from left eye.
// A right depth value is obtained with the following expression:
// depthR = image->rawDepthImage[imageResolution*imageResolution+i*imageResolution+j]
float depthL = image->rawDepthImage[imageY*imageResolution + imageX];
XrDepthViewANDROID viewL = acquireResult.views[0];
float tanL = tanf(viewL.fov.angleLeft);
float tanR = tanf(viewL.fov.angleRight);
float tanU = tanf(viewL.fov.angleUp);
float tanD = tanf(viewL.fov.angleDown);
float s = (imageX + 0.5f) / (float)imageResolution;
float t = (imageY + 0.5f) / (float)imageResolution;
// Calculate the depth camera space position of the point
// corresponding to this depth value.
XrVector3f posInCameraSpace;
posInCameraSpace.z = -depthL;
posInCameraSpace.x = (tanL + (tanR - tanL)*s)*depthL;
posInCameraSpace.y = (tanD + (tanU - tanD)*t)*depthL;
XrPosef depthCameraPoseL = viewL.pose;
// Transform posInCameraSpace by depthCameraPoseL
// ...
// Finish frame loop
// ...
}
새 객체 유형
새 명령어
- xrAcquireDepthSwapchainImagesANDROID
- xrCreateDepthSwapchainANDROID
- xrDestroyDepthSwapchainANDROID
- xrEnumerateDepthResolutionsANDROID
- xrEnumerateDepthSwapchainImagesANDROID
새 구조
- XrDepthAcquireInfoANDROID
- XrDepthAcquireResultANDROID
- XrDepthSwapchainCreateInfoANDROID
- XrDepthSwapchainImageANDROID
- XrDepthViewANDROID
XrSystemProperties 확장 :
새 열거형
새 비트 마스크
새 열거형 상수
XR_ANDROID_DEPTH_TEXTURE_EXTENSION_NAMEXR_ANDROID_depth_texture_SPEC_VERSIONXrObjectType 확장 :
XR_OBJECT_TYPE_DEPTH_SWAPCHAIN_ANDROID
XrResult 확장 :
XR_ERROR_DEPTH_NOT_AVAILABLE_ANDROID
XrStructureType 확장 :
XR_TYPE_DEPTH_ACQUIRE_INFO_ANDROIDXR_TYPE_DEPTH_ACQUIRE_RESULT_ANDROIDXR_TYPE_DEPTH_SWAPCHAIN_CREATE_INFO_ANDROIDXR_TYPE_DEPTH_SWAPCHAIN_IMAGE_ANDROIDXR_TYPE_DEPTH_VIEW_ANDROIDXR_TYPE_SYSTEM_DEPTH_TRACKING_PROPERTIES_ANDROID
문제
버전 기록
버전 1, 2024년 9월 9일 (레바나 첸)
- 초기 확장 프로그램 설명