Chuỗi tên
XR_ANDROID_depth_texture
Loại phần mở rộng
Tiện ích thực thể
Số điện thoại mở rộng đã đăng ký
703
Bản sửa đổi
1
Phần mở rộng và phần phụ thuộc phiên bản
Ngày sửa đổi gần đây nhất
2024-09-11
Trạng thái IP
Không có thông báo xác nhận quyền sở hữu đối với tài sản trí tuệ nào.
Cộng tác viên
Sushant Kulkarni, Google
Cairn Overturf, Google
Spencer Quin, Google
Levana Chen, Google
Tổng quan
Tiện ích này cho phép ứng dụng yêu cầu bản đồ độ sâu của môi trường thực tế xung quanh tai nghe và truy vấn độ phân giải độ sâu được hỗ trợ khi tạo.
Tiện ích này nhằm hiển thị độ sâu thô và mượt mà cho các thử nghiệm che khuất, nhấn và các tác vụ cụ thể khác sử dụng hình học cảnh chính xác, ví dụ: phát hiện khuôn mặt giả mạo.
Kiểm tra chức năng của hệ thống
Cấu trúc XrSystemDepthTrackingPropertiesANDROID được xác định như sau:
typedef struct XrSystemDepthTrackingPropertiesANDROID {
XrStructureType type;
const void* next;
XrBool32 supportsDepthTracking;
} XrSystemDepthTrackingPropertiesANDROID;
Nội dung mô tả thành viên
type
là XrStructureType của cấu trúc này.next
làNULL
hoặc con trỏ trỏ đến cấu trúc tiếp theo trong chuỗi cấu trúc. Không có cấu trúc nào như vậy được xác định trong OpenXR cốt lõi hoặc tiện ích này.supportsDepthTracking
làXrBool32
cho biết liệu hệ thống hiện tại có hỗ trợ tính năng theo dõi độ sâu hay không.
Ứng dụng có thể kiểm tra xem hệ thống có thể theo dõi độ sâu hay không bằng cách mở rộng XrSystemProperties bằng cấu trúc XrSystemDepthTrackingPropertiesANDROID khi gọi xrGetSystemProperties.
Cách sử dụng hợp lệ (ngầm ẩn)
- Bạn phải bật tiện ích
XR_ANDROID_depth_texture
trước khi sử dụng XrSystemDepthTrackingPropertiesANDROID type
phải làXR_TYPE_SYSTEM_DEPTH_TRACKING_PROPERTIES_ANDROID
next
phải làNULL
hoặc con trỏ hợp lệ đến cấu trúc tiếp theo trong chuỗi cấu trúc
Độ phân giải chiều sâu truy vấn
Hàm xrEnumerateDepthResolutionsANDROID được xác định là:
XrResult xrEnumerateDepthResolutionsANDROID(
XrSession session,
uint32_t resolutionCapacityInput,
uint32_t* resolutionCountOutput,
XrDepthCameraResolutionANDROID* resolutions);
Nội dung mô tả tham số
session
là XrSession liệt kê các độ phân giải chiều sâu được hỗ trợ.resolutionCapacityInput
là dung lượng củaresolutions
hoặc 0 để truy xuất dung lượng bắt buộc.resolutionCountOutput
là con trỏ đến số lượnguint64_t
resolutions
đã ghi hoặc con trỏ đến dung lượng bắt buộc trong trường hợpresolutionCapacityInput
không đủ.resolutions
là con trỏ đến một mảng XrDepthCameraResolutionANDROID, nhưng có thể làNULL
nếuresolutionCapacityInput
là 0.- Hãy xem phần Tham số kích thước bộ nhớ đệm để biết nội dung mô tả chi tiết về cách truy xuất kích thước
resolutions
bắt buộc.
xrEnumerateDepthResolutionsANDROID liệt kê các độ phân giải chiều sâu mà phiên hiện tại hỗ trợ. Độ phân giải chiều sâu phải theo thứ tự từ mức ưu tiên cao nhất đến thấp nhất về thời gian chạy. Ứng dụng nên sử dụng tuỳ chọn ưu tiên cao nhất mà ứng dụng hỗ trợ để đạt được hiệu suất và chất lượng tối ưu.
Cách sử dụng hợp lệ (ngầm ẩn)
- Bạn phải bật tiện ích
XR_ANDROID_depth_texture
trước khi gọi xrEnumerateDepthResolutionsANDROID session
phải là một tay cầm XrSession hợp lệresolutionCountOutput
phải là con trỏ đến giá trịuint32_t
- Nếu
resolutionCapacityInput
không phải là 0, thìresolutions
phải là con trỏ đến một mảng các giá trịresolutionCapacityInput
XrDepthCameraResolutionANDROID
Mã trả về
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
Enum XrDepthCameraResolutionANDROID mô tả độ phân giải chiều sâu được hỗ trợ khi tạo 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;
Mô tả enumerant
XR_DEPTH_CAMERA_RESOLUTION_80x80_ANDROID
– Độ phân giải của hình ảnh chiều sâu và độ tin cậy là 80x80.XR_DEPTH_CAMERA_RESOLUTION_160x160_ANDROID
– Độ phân giải của hình ảnh chiều sâu và hình ảnh độ tin cậy là 160x160.XR_DEPTH_CAMERA_RESOLUTION_320x320_ANDROID
– Độ phân giải của hình ảnh độ sâu và hình ảnh độ tin cậy là 320x320.
Tạo chuỗi hoán đổi chiều sâu
XR_DEFINE_HANDLE(XrDepthSwapchainANDROID)
XrDepthSwapchainANDROID là một handle swapchain chiều sâu.
Hàm xrCreateDepthSwapchainANDROID được xác định là:
XrResult xrCreateDepthSwapchainANDROID(
XrSession session,
const XrDepthSwapchainCreateInfoANDROID* createInfo,
XrDepthSwapchainANDROID* swapchain);
Nội dung mô tả tham số
session
là XrSession tạo chuỗi hoán đổi chiều sâu.createInfo
là con trỏ đến cấu trúc XrDepthSwapchainCreateInfoANDROID chứa các thông số sẽ được dùng để tạo chuỗi hoán đổi.swapchain
là con trỏ đến một tay cầm trong đó XrDepthSwapchainANDROID đã tạo sẽ được trả về.
Ứng dụng có thể sử dụng hàm xrCreateDepthSwapchainANDROID để tạo một chuỗi hoán đổi chiều sâu quản lý cả hình ảnh chiều sâu và hình ảnh độ tin cậy.
Sau đó, bạn có thể sử dụng handle chuỗi hoán đổi chiều sâu được trả về trong các lệnh gọi API. Cuối cùng, bạn phải giải phóng tay điều khiển XrDepthSwapchainANDROID bằng cách sử dụng hàm xrDestroyDepthSwapchainANDROID.
Cách sử dụng hợp lệ (ngầm ẩn)
- Bạn phải bật phần mở rộng
XR_ANDROID_depth_texture
trước khi gọi xrCreateDepthSwapchainANDROID session
phải là một tay cầm XrSession hợp lệcreateInfo
phải là con trỏ đến một cấu trúc XrDepthSwapchainCreateInfoANDROID hợp lệswapchain
phải là con trỏ đến một tay cầm XrDepthSwapchainANDROID
Mã trả về
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
Cấu trúc XrDepthSwapchainCreateInfoANDROID được xác định là:
typedef struct XrDepthSwapchainCreateInfoANDROID {
XrStructureType type;
const void* next;
XrDepthCameraResolutionANDROID resolution;
XrDepthSwapchainCreateFlagsANDROID createFlags;
} XrDepthSwapchainCreateInfoANDROID;
Nội dung mô tả thành viên
type
là XrStructureType của cấu trúc này.next
làNULL
hoặc con trỏ trỏ đến cấu trúc tiếp theo trong chuỗi cấu trúc. Không có cấu trúc nào như vậy được xác định trong OpenXR cốt lõi hoặc tiện ích này.resolution
là XrDepthCameraResolutionANDROID mà bạn nên tạo kết cấu độ sâu và độ tin cậy.createFlags
là một hoặc nhiều XrDepthSwapchainCreateFlagsANDROID.
Cấu trúc XrDepthSwapchainCreateInfoANDROID cung cấp các tuỳ chọn tạo cho XrDepthSwapchainANDROID khi được truyền đến xrCreateDepthSwapchainANDROID.
Cách sử dụng hợp lệ (ngầm ẩn)
- Bạn phải bật tiện ích
XR_ANDROID_depth_texture
trước khi sử dụng XrDepthSwapchainCreateInfoANDROID type
phải làXR_TYPE_DEPTH_SWAPCHAIN_CREATE_INFO_ANDROID
next
phải làNULL
hoặc con trỏ hợp lệ đến cấu trúc tiếp theo trong chuỗi cấu trúcresolution
phải là một giá trị XrDepthCameraResolutionANDROID hợp lệcreateFlags
phải là tổ hợp hợp lệ của các giá trị XrDepthSwapchainCreateFlagBitsANDROIDcreateFlags
phải khác 0
XrDepthSwapchainCreateFlagsANDROID chỉ định các tuỳ chọn tạo cho XrDepthSwapchainANDROID.
typedef XrFlags64 XrDepthSwapchainCreateFlagsANDROID;
Các bit hợp lệ cho XrDepthSwapchainCreateFlagsANDROID được xác định bởi XrDepthSwapchainCreateFlagBitsANDROID, được chỉ định như sau:
// 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;
Hàm xrDestroyDepthSwapchainANDROID được xác định là:
XrResult xrDestroyDepthSwapchainANDROID(
XrDepthSwapchainANDROID swapchain);
Nội dung mô tả tham số
swapchain
là một tay cầm XrDepthSwapchainANDROID doxrCreateDepthSwapchainANDROID
tạo trước đó.
Hàm xrDestroyDepthSwapchainANDROID huỷ chuỗi hoán đổi chiều sâu.
Cách sử dụng hợp lệ (ngầm ẩn)
- Bạn phải bật tiện ích
XR_ANDROID_depth_texture
trước khi gọi xrDestroyDepthSwapchainANDROID swapchain
phải là một tay cầm XrDepthSwapchainANDROID hợp lệ
Độ an toàn cho luồng
- Quyền truy cập vào
swapchain
và mọi tay điều khiển con phải được đồng bộ hoá bên ngoài
Mã trả về
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTED
XR_ERROR_HANDLE_INVALID
Truy cập vào kết cấu độ sâu
Hàm xrEnumerateDepthSwapchainImagesANDROID được xác định như sau:
XrResult xrEnumerateDepthSwapchainImagesANDROID(
XrDepthSwapchainANDROID depthSwapchain,
uint32_t depthImageCapacityInput,
uint32_t* depthImageCountOutput,
XrDepthSwapchainImageANDROID* depthImages);
Nội dung mô tả tham số
depthSwapchain
là XrDepthSwapchainANDROID để lấy hình ảnh.depthImageCapacityInput
là dung lượng của mảngdepthImages
hoặc 0 để cho biết yêu cầu truy xuất dung lượng cần thiết.depthImageCountOutput
là con trỏ đến số lượngdepthImages
đã ghi, hoặc con trỏ đến dung lượng bắt buộc trong trường hợpdepthImageCapacityInput
không đủ.depthImages
là con trỏ trỏ đến một mảng cấu trúc XrDepthSwapchainImageANDROID. Giá trị này có thể làNULL
nếudepthImageCapacityInput
là 0.- Hãy xem phần Tham số kích thước bộ nhớ đệm để biết nội dung mô tả chi tiết về cách truy xuất kích thước
depthImages
bắt buộc.
xrEnumerateDepthSwapchainImagesANDROID điền một mảng các cấu trúc XrDepthSwapchainImageANDROID. Các tài nguyên sẽ không đổi và hợp lệ trong suốt thời gian hoạt động của XrDepthSwapchainANDROID. Hàm này hoạt động tương tự như xrEnumerateSwapchainImages.
Cách sử dụng hợp lệ (ngầm ẩn)
- Bạn phải bật phần mở rộng
XR_ANDROID_depth_texture
trước khi gọi xrEnumerateDepthSwapchainImagesANDROID depthSwapchain
phải là một tay cầm XrDepthSwapchainANDROID hợp lệdepthImageCountOutput
phải là con trỏ đến giá trịuint32_t
- Nếu
depthImageCapacityInput
không phải là 0, thìdepthImages
phải là con trỏ đến một mảng các cấu trúcdepthImageCapacityInput
XrDepthSwapchainImageANDROID
Mã trả về
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
Cấu trúc XrDepthSwapchainImageANDROID được xác định là:
typedef struct XrDepthSwapchainImageANDROID {
XrStructureType type;
void* next;
const float* rawDepthImage;
const uint8_t* rawDepthConfidenceImage;
const float* smoothDepthImage;
const uint8_t* smoothDepthConfidenceImage;
} XrDepthSwapchainImageANDROID;
Nội dung mô tả thành viên
type
là XrStructureType của cấu trúc này.next
làNULL
hoặc con trỏ trỏ đến cấu trúc tiếp theo trong chuỗi cấu trúc. Không có cấu trúc nào như vậy được xác định trong OpenXR cốt lõi hoặc tiện ích này.rawDepthImage
làNULL
hoặc con trỏ đến hình ảnh độ sâu thô cho cả chế độ xem bên trái và bên phải. Các giá trị có đơn vị là mét. Giá trị đặc biệt:0.0
cho biết một pixel độ sâu không hợp lệ hoặc trống trong độ sâu thô,Inf
cho biết độ sâu đã biết ở khoảng cách vô cùng xa,rawDepthConfidenceImage
làNULL
hoặc con trỏ đến hình ảnh độ sâu thô về độ tin cậy cho cả chế độ xem bên trái và bên phải.smoothDepthImage
làNULL
hoặc con trỏ để làm mượt hình ảnh độ sâu cho cả chế độ xem bên trái và bên phải. Các giá trị có đơn vị là mét. Giá trị đặc biệt:0.0
cho biết một pixel độ sâu không hợp lệ hoặc trống trong độ sâu mượt,Inf
cho biết độ sâu đã biết ở rất xa.smoothDepthConfidenceImage
làNULL
hoặc con trỏ để làm mượt hình ảnh độ tin cậy về chiều sâu cho cả chế độ xem bên trái và bên phải.
XrDepthSwapchainImageANDROID đại diện cho hình ảnh độ sâu từ một XrDepthSwapchainANDROID có thể đọc được, được phân bổ như mô tả trong XrDepthSwapchainCreateInfoANDROID::resolution và XrDepthSwapchainCreateInfoANDROID::createFlags trong khi gọi xrCreateDepthSwapchainANDROID. Đối với mỗi hình ảnh độ sâu:
- Các giá trị hình ảnh được sắp xếp trong bộ nhớ theo thứ tự hàng chính, không có khoảng đệm giữa các hàng.
- Giá trị đầu tiên là ở trên cùng bên trái và giá trị cuối cùng là ở dưới cùng bên phải.
- Kích thước của bộ nhớ được trỏ đến được xác định bằng giá trị của xrEnumerateDepthSwapchainImagesANDROID và được đặt bằng XrDepthSwapchainCreateInfoANDROID::resolution trong khi gọi xrCreateDepthSwapchainANDROID. Ví dụ: nếu
resolution
làXR_DEPTH_CAMERA_RESOLUTION_160x160_ANDROID
, thì hình ảnh độ sâu sẽ có kích thước2*160*160*sizeof(float)
. - Giá trị của
rawDepthImage
phải làNULL
nếu XrDepthSwapchainCreateInfoANDROID::createFlags chưa đặtXR_DEPTH_SWAPCHAIN_CREATE_RAW_DEPTH_IMAGE_BIT_ANDROID
. - Giá trị của
rawDepthConfidenceImage
phải làNULL
nếu XrDepthSwapchainCreateInfoANDROID::createFlags chưa đặtXR_DEPTH_SWAPCHAIN_CREATE_RAW_CONFIDENCE_IMAGE_BIT_ANDROID
. - Giá trị của
smoothDepthImage
phải làNULL
nếu XrDepthSwapchainCreateInfoANDROID::createFlags chưa đặtXR_DEPTH_SWAPCHAIN_CREATE_SMOOTH_DEPTH_IMAGE_BIT_ANDROID
. - Giá trị của
smoothDepthConfidenceImage
phải làNULL
nếu XrDepthSwapchainCreateInfoANDROID::createFlags chưa đặtXR_DEPTH_SWAPCHAIN_CREATE_SMOOTH_CONFIDENCE_IMAGE_BIT_ANDROID
.
Cách sử dụng hợp lệ (ngầm ẩn)
- Bạn phải bật tiện ích
XR_ANDROID_depth_texture
trước khi sử dụng XrDepthSwapchainImageANDROID type
phải làXR_TYPE_DEPTH_SWAPCHAIN_IMAGE_ANDROID
next
phải làNULL
hoặc con trỏ hợp lệ đến cấu trúc tiếp theo trong chuỗi cấu trúc
Hàm xrAcquireDepthSwapchainImagesANDROID được xác định như sau:
XrResult xrAcquireDepthSwapchainImagesANDROID(
XrDepthSwapchainANDROID depthSwapchain,
const XrDepthAcquireInfoANDROID* acquireInfo,
XrDepthAcquireResultANDROID* acquireResult);
Nội dung mô tả tham số
depthSwapchain
là một tay cầm XrDepthSwapchainANDROID cho hình ảnh độ sâu.acquireInfo
là một XrDepthAcquireInfoANDROID chứa thông tin về cách thu thập hình ảnh độ sâu.acquireResult
là XrDepthAcquireResultANDROID được trả về chứa thông tin về hình ảnh độ sâu đã thu được.
Ứng dụng có thể sử dụng hàm xrAcquireDepthSwapchainImagesANDROID để thu nạp chỉ mục hình ảnh chuỗi hoán đổi mới nhất hiện có, chẳng hạn như XrDepthAcquireResultANDROID::acquiredIndex, vào mảng XrDepthSwapchainImageANDROID được liệt kê bằng xrEnumerateDepthSwapchainImagesANDROID. XrDepthAcquireResultANDROID được trả về cũng chứa các thông tin khác như trường nhìn và tư thế cần thiết để diễn giải dữ liệu chiều sâu. Bạn có thể đọc từ khe đã thu được trong mảng hình ảnh cho đến khi lệnh gọi tiếp theo đến xrAcquireDepthSwapchainImagesANDROID.
Không được có nhiều hơn một lệnh gọi đến xrAcquireDepthSwapchainImagesANDROID giữa bất kỳ cặp lệnh gọi xrBeginFrame và xrEndFrame tương ứng nào trong một phiên.
Cách sử dụng hợp lệ (ngầm ẩn)
- Bạn phải bật tiện ích
XR_ANDROID_depth_texture
trước khi gọi xrAcquireDepthSwapchainImagesANDROID depthSwapchain
phải là một tay điều khiển XrDepthSwapchainANDROID hợp lệacquireInfo
phải là con trỏ đến một cấu trúc XrDepthAcquireInfoANDROID hợp lệacquireResult
phải là con trỏ trỏ đến cấu trúc XrDepthAcquireResultANDROID
Mã trả về
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
Cấu trúc XrDepthAcquireInfoANDROID được xác định là:
typedef struct XrDepthAcquireInfoANDROID {
XrStructureType type;
const void* next;
XrSpace space;
XrTime displayTime;
} XrDepthAcquireInfoANDROID;
Nội dung mô tả thành viên
type
là XrStructureType của cấu trúc này.next
làNULL
hoặc con trỏ trỏ đến cấu trúc tiếp theo trong chuỗi cấu trúc. Không có cấu trúc nào như vậy được xác định trong OpenXR cốt lõi hoặc tiện ích này.space
là một XrSpace xác định khung tham chiếu của tư thế được trả về trong XrDepthAcquireResultANDROID::views.displayTime
là mộtXrTime
chỉ định thời gian dùng để tính toán tư thế cho tư thế được trả về trong XrDepthAcquireResultANDROID::views. Ứng dụng nên truyền thời gian hiển thị dự đoán cho khung hình hiện tại.
Cách sử dụng hợp lệ (ngầm ẩn)
- Bạn phải bật tiện ích
XR_ANDROID_depth_texture
trước khi sử dụng XrDepthAcquireInfoANDROID type
phải làXR_TYPE_DEPTH_ACQUIRE_INFO_ANDROID
next
phải làNULL
hoặc con trỏ hợp lệ đến cấu trúc tiếp theo trong chuỗi cấu trúcspace
phải là một tên người dùng XrSpace hợp lệ
Cấu trúc XrDepthAcquireResultANDROID được xác định là:
typedef struct XrDepthAcquireResultANDROID {
XrStructureType type;
const void* next;
uint32_t acquiredIndex;
XrTime exposureTimestamp;
XrDepthViewANDROID views[2];
} XrDepthAcquireResultANDROID;
Nội dung mô tả thành viên
type
là XrStructureType của cấu trúc này.next
làNULL
hoặc con trỏ trỏ đến cấu trúc tiếp theo trong chuỗi cấu trúc. Không có cấu trúc nào như vậy được xác định trong OpenXR cốt lõi hoặc tiện ích này.acquiredIndex
là chỉ mục của hoạ tiết đã thu được vào mảng XrDepthSwapchainImageANDROID được liệt kê bằng xrEnumerateDepthSwapchainImagesANDROID.exposureTimestamp
làXrTime
chỉ định thời điểm chụp bản đồ độ sâu.views
là một mảng gồm hai XrDepthViewANDROID, một cho mỗi mắt, trong đó chỉ mục 0 là mắt trái và chỉ mục 1 là mắt phải.
Cách sử dụng hợp lệ (ngầm ẩn)
- Bạn phải bật tiện ích
XR_ANDROID_depth_texture
trước khi sử dụng XrDepthAcquireResultANDROID type
phải làXR_TYPE_DEPTH_ACQUIRE_RESULT_ANDROID
next
phải làNULL
hoặc con trỏ hợp lệ đến cấu trúc tiếp theo trong chuỗi cấu trúc- Mọi phần tử nhất định của
views
phải là một cấu trúc XrDepthViewANDROID hợp lệ
Cấu trúc XrDepthViewANDROID được xác định là:
typedef struct XrDepthViewANDROID {
XrStructureType type;
const void* next;
XrFovf fov;
XrPosef pose;
} XrDepthViewANDROID;
Nội dung mô tả thành viên
type
là XrStructureType của cấu trúc này.next
làNULL
hoặc con trỏ trỏ đến cấu trúc tiếp theo trong chuỗi cấu trúc. Không có cấu trúc nào như vậy được xác định trong OpenXR cốt lõi hoặc tiện ích này.fov
là một XrFovf chỉ định trường nhìn dùng để tạo chế độ xem này. Chế độ xem không bao giờ được lật theo chiều ngang hoặc chiều dọc.pose
là một XrPosef chỉ định tư thế mà bản đồ độ sâu được kết xuất. Khung tham chiếu được chỉ định trong XrDepthAcquireInfoANDROID.
Cách sử dụng hợp lệ (ngầm ẩn)
- Bạn phải bật tiện ích
XR_ANDROID_depth_texture
trước khi sử dụng XrDepthViewANDROID type
phải làXR_TYPE_DEPTH_VIEW_ANDROID
next
phải làNULL
hoặc con trỏ hợp lệ đến cấu trúc tiếp theo trong chuỗi cấu trúc
Mã ví dụ cho tính năng theo dõi độ sâu
Mã ví dụ sau đây minh hoạ cách thu thập hình ảnh độ sâu.
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
// ...
}
Loại đối tượng mới
Hằng số enum mới
Bổ sung enum XrObjectType bằng:
XR_OBJECT_TYPE_DEPTH_SWAPCHAIN_ANDROID
Bổ sung enum XrResult bằng:
XR_ERROR_DEPTH_NOT_AVAILABLE_ANDROID
Bổ sung enum 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
Enum mới
Cấu trúc mới
- XrDepthSwapchainCreateInfoANDROID
- XrDepthSwapchainImageANDROID
- XrDepthAcquireInfoANDROID
- XrDepthViewANDROID
- XrDepthAcquireResultANDROID
- XrSystemDepthTrackingPropertiesANDROID
Hàm mới
- xrCreateDepthSwapchainANDROID
- xrDestroyDepthSwapchainANDROID
- xrEnumerateDepthSwapchainImagesANDROID
- xrEnumerateDepthResolutionsANDROID
- xrAcquireDepthSwapchainImagesANDROID
Vấn đề
Nhật ký phiên bản
- Bản sửa đổi 1, ngày 9 tháng 9 năm 2024 (Levana Chen)
- Nội dung mô tả ban đầu của tiện ích