이름 문자열
XR_ANDROID_depth_texture
확장 프로그램 유형
인스턴스 연장
등록된 부속 번호
703
버전
1
확장 프로그램 및 버전 종속 항목
최종 수정일
2024-09-11
IP 상태
알려진 IP 소유권 주장이 없습니다.
도움을 주신 분들
Sushant Kulkarni, Google
케인 오버터프, Google
스펜서 퀸, Google
레바나 첸, Google
개요
이 확장 프로그램을 사용하면 애플리케이션이 헤드셋 주변의 실제 환경에 관한 깊이 맵을 요청하고 생성 시 지원되는 깊이 해상도를 쿼리할 수 있습니다.
이 확장 프로그램은 가려짐, 히트 테스트, 정확한 장면 도형을 사용하는 기타 특정 작업(예: 위조 얼굴 감지)에 원시 및 부드러운 깊이를 노출하기 위한 것입니다.
시스템 기능 검사
XrSystemDepthTrackingPropertiesANDROID 구조는 다음과 같이 정의됩니다.
typedef struct XrSystemDepthTrackingPropertiesANDROID {
XrStructureType type;
const void* next;
XrBool32 supportsDepthTracking;
} XrSystemDepthTrackingPropertiesANDROID;
회원 설명
type
은 이 구조의 XrStructureType입니다.next
는NULL
또는 구조 체인의 다음 구조에 대한 포인터입니다. 핵심 OpenXR 또는 이 확장 프로그램에는 이러한 구조가 정의되어 있지 않습니다.supportsDepthTracking
는 현재 시스템에서 깊이 추적을 지원하는지 여부를 나타내는XrBool32
입니다.
애플리케이션은 xrGetSystemProperties를 호출할 때 XrSystemProperties를 XrSystemDepthTrackingPropertiesANDROID 구조로 확장하여 시스템이 깊이 추적을 할 수 있는지 검사할 수 있습니다.
유효한 사용 (암시적)
- 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_t
resolutions
개수의 포인터이거나resolutionCapacityInput
가 충분하지 않은 경우 필요한 용량의 포인터입니다.resolutions
는 XrDepthCameraResolutionANDROID 배열에 대한 포인터이지만resolutionCapacityInput
이 0인 경우NULL
일 수 있습니다.- 필요한
resolutions
크기를 검색하는 방법에 관한 자세한 내용은 버퍼 크기 매개변수 섹션을 참고하세요.
xrEnumerateDepthResolutionsANDROID는 현재 세션에서 지원되는 깊이 해상도를 열거합니다. 깊이 해상도는 런타임 환경에서 가장 높은 선호도부터 가장 낮은 선호도 순으로 정렬되어 야 합니다. 애플리케이션은 최적의 성능과 품질을 위해 지원하는 가장 높은 환경설정을 사용해야 합니다.
유효한 사용 (암시적)
- xrEnumerateDepthResolutionsANDROID를 호출하기 전에
XR_ANDROID_depth_texture
확장 프로그램을 사용 설정해야 합니다. session
는 유효한 XrSession 핸들여야 합니다.resolutionCountOutput
은(는)uint32_t
값을 가리키는 포인터여야 합니다.resolutionCapacityInput
가 0이 아닌 경우resolutions
는resolutionCapacityInput
XrDepthCameraResolutionANDROID 값 배열의 포인터여야 합니다.
반품 코드
XR_SUCCESS
XR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTED
XR_ERROR_VALIDATION_FAILURE
XR_ERROR_RUNTIME_FAILURE
XR_ERROR_HANDLE_INVALID
XR_ERROR_INSTANCE_LOST
XR_ERROR_SESSION_LOST
XR_ERROR_SIZE_INSUFFICIENT
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
} 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 함수를 사용하여 깊이 및 신뢰도 이미지를 모두 관리하는 깊이 스왑체인을 만들 수 있습니다.
반환된 깊이 스왑 체인 핸들은 이후 API 호출에서 사용될 수 있습니다. XrDepthSwapchainANDROID 핸들은 결국 xrDestroyDepthSwapchainANDROID 함수를 사용하여 해제해야 합니다.
유효한 사용 (암시적)
- xrCreateDepthSwapchainANDROID를 호출하기 전에
XR_ANDROID_depth_texture
확장 프로그램을 사용 설정해야 합니다. session
는 유효한 XrSession 핸들여야 합니다.createInfo
는 유효한 XrDepthSwapchainCreateInfoANDROID 구조의 포인터여야 합니다.swapchain
는 XrDepthSwapchainANDROID 핸들에 대한 포인터여야 합니다.
반품 코드
XR_SUCCESS
XR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTED
XR_ERROR_RUNTIME_FAILURE
XR_ERROR_INSTANCE_LOST
XR_ERROR_SESSION_LOST
XR_ERROR_OUT_OF_MEMORY
XR_ERROR_HANDLE_INVALID
XR_ERROR_LIMIT_REACHED
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 값이어야 합니다.createFlags
은(는) XrDepthSwapchainCreateFlagBitsANDROID 값의 유효한 조합이어야 합니다.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;
xrDestroyDepthSwapchainANDROID 함수는 다음과 같이 정의됩니다.
XrResult xrDestroyDepthSwapchainANDROID(
XrDepthSwapchainANDROID swapchain);
매개변수 설명
swapchain
은 이전에xrCreateDepthSwapchainANDROID
에서 만든 XrDepthSwapchainANDROID 핸들입니다.
xrDestroyDepthSwapchainANDROID 함수는 depth swapchain을 삭제합니다.
유효한 사용 (암시적)
- xrDestroyDepthSwapchainANDROID를 호출하기 전에
XR_ANDROID_depth_texture
확장 프로그램을 사용 설정해야 합니다. swapchain
는 유효한 XrDepthSwapchainANDROID 핸들여야 합니다.
스레드 안전
swapchain
및 모든 하위 핸들에 대한 액세스는 외부에서 동기화되어야 함
반품 코드
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTED
XR_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 핸들여야 합니다.depthImageCountOutput
은(는)uint32_t
값을 가리키는 포인터여야 합니다.depthImageCapacityInput
가 0이 아니면depthImages
는depthImageCapacityInput
XrDepthSwapchainImageANDROID 구조 배열의 포인터여야 합니다.
반품 코드
XR_SUCCESS
XR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTED
XR_ERROR_VALIDATION_FAILURE
XR_ERROR_RUNTIME_FAILURE
XR_ERROR_HANDLE_INVALID
XR_ERROR_INSTANCE_LOST
XR_ERROR_SESSION_LOST
XR_ERROR_SIZE_INSUFFICIENT
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는 읽을 수 있는 XrDepthSwapchainANDROID의 깊이 이미지를 나타내며, xrCreateDepthSwapchainANDROID를 호출할 때 XrDepthSwapchainCreateInfoANDROID::resolution 및 XrDepthSwapchainCreateInfoANDROID::createFlags에 설명된 대로 할당됩니다. 각 깊이 이미지에 대해 다음을 실행합니다.
- 이미지 값은 행 사이에 패딩 없이 행 위주의 순서로 메모리에 배치됩니다.
- 첫 번째 값은 왼쪽 상단이고 마지막 값은 오른쪽 하단입니다.
- 가리키는 메모리의 크기는 xrEnumerateDepthSwapchainImagesANDROID의 값에 따라 결정되며 xrCreateDepthSwapchainANDROID를 호출할 때 XrDepthSwapchainCreateInfoANDROID::resolution에 의해 설정됩니다. 예를 들어
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
를 설정하지 않은 경우smoothDepthConfidenceImage
의 값은NULL
여야 합니다.
유효한 사용 (암시적)
- XrDepthSwapchainImageANDROID를 사용하기 전에
XR_ANDROID_depth_texture
확장 프로그램을 사용 설정해야 합니다. 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 함수를 사용하여 사용 가능한 최신 스왑체인 이미지 색인(예: XrDepthAcquireResultANDROID::acquiredIndex)을 xrEnumerateDepthSwapchainImagesANDROID에서 열거된 XrDepthSwapchainImageANDROID 배열에 획득할 수 있습니다. 반환된 XrDepthAcquireResultANDROID에는 깊이 데이터를 해석하는 데 필요한 시야와 자세와 같은 기타 정보도 포함됩니다. xrAcquireDepthSwapchainImagesANDROID를 다음에 호출할 때까지 이미지 배열의 획득된 슬롯에서 읽을 수 있습니다.
세션에서 상응하는 xrBeginFrame 및 xrEndFrame 호출 쌍 사이에 xrAcquireDepthSwapchainImagesANDROID 호출이 하나만 있어야 합니다.
유효한 사용 (암시적)
- xrAcquireDepthSwapchainImagesANDROID를 호출하기 전에
XR_ANDROID_depth_texture
확장 프로그램을 사용 설정해야 합니다. depthSwapchain
는 유효한 XrDepthSwapchainANDROID 핸들여야 합니다.acquireInfo
는 유효한 XrDepthAcquireInfoANDROID 구조체에 대한 포인터여야 합니다.acquireResult
는 XrDepthAcquireResultANDROID 구조체의 포인터여야 합니다.
반품 코드
XR_SUCCESS
XR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTED
XR_ERROR_VALIDATION_FAILURE
XR_ERROR_RUNTIME_FAILURE
XR_ERROR_HANDLE_INVALID
XR_ERROR_INSTANCE_LOST
XR_ERROR_SESSION_LOST
XR_ERROR_DEPTH_NOT_AVAILABLE_ANDROID
XR_ERROR_CALL_ORDER_INVALID
XR_ERROR_LIMIT_REACHED
XR_ERROR_TIME_INVALID
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
// 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,
.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,
// Use the resolution supported by the runtime.
.resolution = supportedDepthResolution,
};
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,
.time = time};
XrDepthAcquireResultANDROID acquireResult = {
.type = XR_TYPE_DEPTH_ACQUIRE_RESULT_ANDROID,
};
CHK_XR(xrAcquireDepthImagesANDROID(
depthSwapchain, &acquireInfo, &acquireResult));
// Each value in a depth image corresponds to a point in the real world.
// The sample code in this section 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.acquireIndex];
// Assume supported resolution is XR_DEPTH_CAMERA_RESOLUTION_160x160_ANDROID.
const int imageResolution = 160;
int imageY = // value in [0, imageResolution)
int imageX = // value in [0, imageResolution)
// Get depth value from left eye.
// A right depth value would be 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 = (tanB + (tanU - tanB)*t)*depthL;
XrPosef depthCameraPoseL = viewL.pose;
// Transform posInCameraSpace by depthCameraPoseL
// ...
// Finish frame loop
// ...
}
새로운 객체 유형
새 enum 상수
XrObjectType 열거형은 다음으로 확장됩니다.
XR_OBJECT_TYPE_DEPTH_SWAPCHAIN_ANDROID
XrResult 열거형이 다음과 같이 확장되었습니다.
XR_ERROR_DEPTH_NOT_AVAILABLE_ANDROID
XrStructureType 열거형은 다음과 같이 확장됩니다.
XR_TYPE_DEPTH_SWAPCHAIN_CREATE_INFO_ANDROID
XR_TYPE_DEPTH_VIEW_ANDROID
XR_TYPE_DEPTH_ACQUIRE_INFO_ANDROID
XR_TYPE_DEPTH_ACQUIRE_RESULT_ANDROID
XR_TYPE_SYSTEM_DEPTH_TRACKING_PROPERTIES_ANDROID
XR_TYPE_DEPTH_SWAPCHAIN_IMAGE_ANDROID
새 열거형
새로운 구조
- XrDepthSwapchainCreateInfoANDROID
- XrDepthSwapchainImageANDROID
- XrDepthAcquireInfoANDROID
- XrDepthViewANDROID
- XrDepthAcquireResultANDROID
- XrSystemDepthTrackingPropertiesANDROID
새로운 함수
- xrCreateDepthSwapchainANDROID
- xrDestroyDepthSwapchainANDROID
- xrEnumerateDepthSwapchainImagesANDROID
- xrEnumerateDepthResolutionsANDROID
- xrAcquireDepthSwapchainImagesANDROID
문제
버전 기록
- 버전 1, 2024년 9월 9일 (레바나 첸)
- 초기 확장 프로그램 설명