XR_ANDROID_depth_texture
Name String
XR_ANDROID_depth_texture
Loại tiện ích
Tiện ích phiên bản
Số máy nhánh đã đăng ký
703
Bản sửa đổi
1
Trạng thái phê chuẩn
Chưa được phê chuẩn
Phần mở rộng và các phần phụ thuộc vào 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 nào đã biết về quyền sở hữu trí tuệ.
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 kính thực tế ảo và truy vấn độ phân giải độ sâu được hỗ trợ tại thời điểm tạo.
Tiện ích này nhằm mục đích hiển thị độ sâu thô và mượt mà cho việc tắc nghẽn, thử nghiệm nhấn và các tác vụ cụ thể khác tận dụng hình học cảnh chính xác, chẳng hạn như phát hiện khuôn mặt giả mạo.
Lưu ý
Các bản đồ độ sâu được tạo bởi thời gian chạy và chia sẻ với ứng dụng bằng XrDepthSwapchainANDROID . Thời gian chạy không được thay đổi độ phân giải hình ảnh độ sâu được trả về thông qua xrEnumerateDepthResolutionsANDROID trong suốt vòng đời của ứng dụng.
Quyền
Tiện ích này hiển thị một kết cấu độ sâu được lấy mẫu xuống để giảm nhẹ các mối lo ngại về Thông tin nhận dạng cá nhân (PII). Các ứng dụng Android phải có quyền android.permission.SCENE_UNDERSTANDING_FINE được liệt kê trong tệp kê khai vì tiện ích này cho thấy hình học của môi trường. Quyền android.permission.SCENE_UNDERSTANDING_FINE được coi là một quyền nguy hiểm. Ứng dụng phải yêu cầu cấp quyền trong thời gian chạy để sử dụng các chức năng này:
(cấp độ bảo vệ: nguy hiểm)
Kiểm tra khả năng của hệ thống
Cấu trúc XrSystemDepthTrackingPropertiesANDROID được xác định như sau:
typedef struct XrSystemDepthTrackingPropertiesANDROID {
XrStructureType type;
void* next;
XrBool32 supportsDepthTracking;
} XrSystemDepthTrackingPropertiesANDROID;
Nội dung mô tả thành viên
typelà XrStructureType của cấu trúc này.nextlàNULLhoặc con 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.supportsDepthTrackinglà mộtXrBool32cho 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.
Một ứng dụng có thể kiểm tra xem hệ thống có khả năng 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 .
Nếu và chỉ khi một thời gian chạy trả về XR_FALSE cho supportsDepthTracking , thì thời gian chạy phải trả về XR_ERROR_FEATURE_UNSUPPORTED từ xrCreateDepthSwapchainANDROID .
Cách sử dụng hợp lệ (ngầm)
- Bạn phải bật tiện ích
XR_ANDROID_depth_texturetrước khi sử dụng XrSystemDepthTrackingPropertiesANDROID -
typephải làXR_TYPE_SYSTEM_DEPTH_TRACKING_PROPERTIES_ANDROID -
nextphải làNULLhoặc một con trỏ hợp lệ đến cấu trúc tiếp theo trong chuỗi cấu trúc
Độ phân giải theo độ sâu truy vấn
Hàm xrEnumerateDepthResolutionsANDROID được xác định như sau:
XrResult xrEnumerateDepthResolutionsANDROID(
XrSession session,
uint32_t resolutionCapacityInput,
uint32_t* resolutionCountOutput,
XrDepthCameraResolutionANDROID* resolutions);
Nội dung mô tả về tham số
sessionlà XrSession liệt kê các độ phân giải chiều sâu được hỗ trợ.resolutionCapacityInputlà dung lượng củaresolutionshoặc 0 để truy xuất dung lượng cần thiết.resolutionCountOutputlà một con trỏ đến số lượnguint64_tresolutionsđã ghi hoặc một con trỏ đến dung lượng cần thiết trong trường hợpresolutionCapacityInputkhông đủ.resolutionslà một con trỏ đến một mảng XrDepthCameraResolutionANDROID , nhưng có thể làNULLnếuresolutionCapacityInputlà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
resolutionscần thiết.
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 thời gian chạy cao nhất đến thấp nhất. Ứng dụng nên sử dụng lựa 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.
Thời gian chạy phải luôn trả về nội dung bộ đệm giống hệt nhau từ quá trình liệt kê này trong suốt thời gian của phiên.
Cách sử dụng hợp lệ (ngầm)
- Bạn phải bật tiện ích
XR_ANDROID_depth_texturetrước khi gọi xrEnumerateDepthResolutionsANDROID -
sessionphải là một đối tượng XrSession hợp lệ -
resolutionCountOutputphải là con trỏ đến giá trịuint32_t - Nếu
resolutionCapacityInputkhông phải là0, thìresolutionsphải là con trỏ đến một mảng gồm các giá trịresolutionCapacityInputXrDepthCameraResolutionANDROID
Mã trả về
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
Liệt kê XrDepthCameraResolutionANDROID mô tả các độ 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,
XR_DEPTH_CAMERA_RESOLUTION_MAX_ENUM_ANDROID = 0x7FFFFFFF
} XrDepthCameraResolutionANDROID;
Nội dung mô tả về các giá trị trong bảng liệt kê
XR_DEPTH_CAMERA_RESOLUTION_80x80_ANDROID– Độ phân giải của hình ảnh độ sâu và độ tin cậy là 80x80.XR_DEPTH_CAMERA_RESOLUTION_160x160_ANDROID– Độ phân giải của hình ảnh độ sâu và độ tin cậy là 160x160.XR_DEPTH_CAMERA_RESOLUTION_320x320_ANDROID– Độ phân giải của hình ảnh độ sâu và độ tin cậy là 320x320.
Tạo một chuỗi hoán đổi độ sâu
XR_DEFINE_HANDLE(XrDepthSwapchainANDROID)
XrDepthSwapchainANDROID là một handle swapchain độ sâu.
Hàm xrCreateDepthSwapchainANDROID được xác định như sau:
XrResult xrCreateDepthSwapchainANDROID(
XrSession session,
const XrDepthSwapchainCreateInfoANDROID* createInfo,
XrDepthSwapchainANDROID* swapchain);
Nội dung mô tả về tham số
sessionlà XrSession tạo ra chuỗi hoán đổi độ sâu.createInfolà con trỏ đến một cấu trúc XrDepthSwapchainCreateInfoANDROID chứa các tham số sẽ được dùng để tạo swapchain.swapchainlà một con trỏ đến một đối tượng mà 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 độ sâu quản lý cả hình ảnh độ sâu và độ tin cậy.
- Thời gian chạy phải trả về
XR_ERROR_FEATURE_UNSUPPORTEDnếu hệ thống không hỗ trợ tính năng theo dõi độ sâu. - Thời gian chạy phải trả về
XR_ERROR_PERMISSION_INSUFFICIENTnếu ứng dụng gọi điện chưa được cấp các quyền cần thiết. - Thời gian chạy phải trả về
XR_ERROR_VALIDATION_FAILUREnếu độ phân giải chiều sâu được chỉ định trong XrDepthSwapchainCreateInfoANDROID không được hỗ trợ. - Thời gian chạy chỉ tạo hình ảnh độ tin cậy về độ sâu khi các bit tương ứng được đặt cho
createInfotại thời điểm tạo chuỗi hoán đổi.
Sau đó, bạn có thể dùng giá trị nhận dạng chuỗi hoán đổi độ 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 đối tượng XrDepthSwapchainANDROID thông qua hàm xrDestroyDepthSwapchainANDROID.
Cách sử dụng hợp lệ (ngầm)
- Bạn phải bật tiện ích
XR_ANDROID_depth_texturetrước khi gọi xrCreateDepthSwapchainANDROID -
sessionphải là một đối tượng XrSession hợp lệ -
createInfophải là con trỏ đến một cấu trúc XrDepthSwapchainCreateInfoANDROID hợp lệ -
swapchainphải là một con trỏ đến một đối tượng XrDepthSwapchainANDROID
Mã trả về
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
Cấu trúc XrDepthSwapchainCreateInfoANDROID được xác định như sau:
typedef struct XrDepthSwapchainCreateInfoANDROID {
XrStructureType type;
const void* next;
XrDepthCameraResolutionANDROID resolution;
XrDepthSwapchainCreateFlagsANDROID createFlags;
} XrDepthSwapchainCreateInfoANDROID;
Nội dung mô tả thành viên
typelà XrStructureType của cấu trúc này.nextlàNULLhoặc con 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.resolutionlà XrDepthCameraResolutionANDROID mà các hoạ tiết độ sâu và độ tin cậy được tạo ra.createFlagslà một hoặc nhiều XrDepthSwapchainCreateFlagsANDROID .
Cấu trúc XrDepthSwapchainCreateInfoANDROID cung cấp các lựa chọn tạo cho XrDepthSwapchainANDROID khi được truyền đến xrCreateDepthSwapchainANDROID .
Cách sử dụng hợp lệ (ngầm)
- Bạn phải bật tiện ích
XR_ANDROID_depth_texturetrước khi sử dụng XrDepthSwapchainCreateInfoANDROID -
typephải làXR_TYPE_DEPTH_SWAPCHAIN_CREATE_INFO_ANDROID -
nextphải làNULLhoặc một con trỏ hợp lệ đến cấu trúc tiếp theo trong chuỗi cấu trúc -
resolutionphải là một giá trị XrDepthCameraResolutionANDROID hợp lệ -
createFlagsphải là một tổ hợp hợp lệ của các giá trị XrDepthSwapchainCreateFlagBitsANDROID -
createFlagskhông được là0
XrDepthSwapchainCreateFlagsANDROID chỉ định các lựa chọn tạo cho XrDepthSwapchainANDROID .
typedef XrFlags64 XrDepthSwapchainCreateFlagsANDROID;
Các bit hợp lệ cho XrDepthSwapchainCreateFlagsANDROID được xác định bằng XrDepthSwapchainCreateFlagBitsANDROID , được chỉ định là:
// 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;
Nội dung mô tả cờ
XR_DEPTH_SWAPCHAIN_CREATE_SMOOTH_DEPTH_IMAGE_BIT_ANDROID– Cho biết swapchain sẽ cung cấp hình ảnh độ sâu mượt mà.XR_DEPTH_SWAPCHAIN_CREATE_SMOOTH_CONFIDENCE_IMAGE_BIT_ANDROID– Cho biết swapchain sẽ cung cấp hình ảnh độ sâu mượt mà.XR_DEPTH_SWAPCHAIN_CREATE_RAW_DEPTH_IMAGE_BIT_ANDROID– Cho biết swapchain sẽ cung cấp hình ảnh độ sâu thô.XR_DEPTH_SWAPCHAIN_CREATE_RAW_CONFIDENCE_IMAGE_BIT_ANDROID– Cho biết chuỗi trao đổi sẽ cung cấp hình ảnh độ sâu thô.
Hàm xrDestroyDepthSwapchainANDROID được xác định như sau:
XrResult xrDestroyDepthSwapchainANDROID(
XrDepthSwapchainANDROID swapchain);
Nội dung mô tả về tham số
swapchainlà một đối tượng XrDepthSwapchainANDROID do xrCreateDepthSwapchainANDROID tạo trước đó .
Hàm xrDestroyDepthSwapchainANDROID sẽ huỷ chuỗi hoán đổi độ sâu. Sau lệnh gọi này, thời gian chạy có thể giải phóng tất cả bộ nhớ và tài nguyên có liên quan.
Cách sử dụng hợp lệ (ngầm)
- Bạn phải bật tiện ích
XR_ANDROID_depth_texturetrước khi gọi xrDestroyDepthSwapchainANDROID -
swapchainphải là một đối tượng XrDepthSwapchainANDROID hợp lệ
Độ an toàn cho luồng
- Quyền truy cập vào
swapchainvà mọi đối tượng con phải được đồng bộ hoá bên ngoài
Mã trả về
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALID
Truy cập vào kết cấu chiề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ả về tham số
depthSwapchainlà XrDepthSwapchainANDROID để lấy hình ảnh.depthImageCapacityInputlà dung lượng của mảngdepthImageshoặc 0 để cho biết yêu cầu truy xuất dung lượng cần thiết.depthImageCountOutputlà con trỏ đến số lượngdepthImagesđã ghi hoặc con trỏ đến dung lượng cần thiết trong trường hợpdepthImageCapacityInputkhông đủ.depthImageslà con trỏ trỏ đến một mảng gồm các cấu trúc XrDepthSwapchainImageANDROID. Giá trị này có thể làNULLnếudepthImageCapacityInputlà 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
depthImagescần thiết.
xrEnumerateDepthSwapchainImagesANDROID điền vào một mảng gồm các cấu trúc XrDepthSwapchainImageANDROID. Các tài nguyên phải không đổi và hợp lệ trong suốt thời gian tồn tại của XrDepthSwapchainANDROID . Hàm này hoạt động tương tự như xrEnumerateSwapchainImages .
Thời gian chạy phải luôn trả về nội dung bộ đệm giống hệt nhau từ quá trình liệt kê này trong suốt thời gian tồn tại của chuỗi hoán đổi.
Cách sử dụng hợp lệ (ngầm)
- Bạn phải bật tiện ích
XR_ANDROID_depth_texturetrước khi gọi xrEnumerateDepthSwapchainImagesANDROID -
depthSwapchainphải là một đối tượng XrDepthSwapchainANDROID hợp lệ -
depthImageCountOutputphải là con trỏ đến giá trịuint32_t - Nếu
depthImageCapacityInputkhông phải là0, thìdepthImagesphải là con trỏ đến một mảng gồmdepthImageCapacityInputcấu trúc XrDepthSwapchainImageANDROID
Mã trả về
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
Cấu trúc XrDepthSwapchainImageANDROID được xác định như sau:
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
typelà XrStructureType của cấu trúc này.nextlàNULLhoặc con 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.rawDepthImagelàNULLhoặc con trỏ đến hình ảnh độ sâu thô cho cả khung hiển thị bên trái và bên phải do thời gian chạy phân bổ. Các giá trị có đơn vị là mét. Giá trị đặc biệt:0.0cho biết một pixel độ sâu không hợp lệ hoặc trống trong độ sâu thô,Infcho biết độ sâu đã biết và có hiệu quả vô cùng xa,rawDepthConfidenceImagelàNULLhoặc con trỏ đến hình ảnh độ tin cậy về chiều sâu thô cho cả khung hiển thị bên trái và bên phải do thời gian chạy phân bổ.smoothDepthImagelàNULLhoặc con trỏ đến hình ảnh độ sâu mượt mà cho cả khung hiển thị bên trái và bên phải do thời gian chạy phân bổ. Các giá trị có đơn vị là mét. Giá trị đặc biệt:0.0cho biết một pixel độ sâu không hợp lệ hoặc trống trong độ sâu mượt mà,Infcho biết độ sâu đã biết và có hiệu quả vô cùng xa.smoothDepthConfidenceImagelàNULLhoặc con trỏ đến hình ảnh độ sâu mượt mà cho cả khung hiển thị bên trái và bên phải do thời gian chạy phân bổ.
Con trỏ vùng đệm hình ảnh sẽ chỉ hợp lệ trong suốt vòng đời của swapchain. Sau khi swapchain bị huỷ, các con trỏ sẽ được coi là con trỏ treo.
XrDepthSwapchainImageANDROID biểu thị 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 chiều sâu:
- Các giá trị hình ảnh được bố trí 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 ::
resolutiontrong khi gọi xrCreateDepthSwapchainANDROID . Ví dụ: nếu XrDepthSwapchainCreateInfoANDROID::resolutionlàXR_DEPTH_CAMERA_RESOLUTION_160x160_ANDROID, thì hình ảnh chiều sâu sẽ có kích thước2*160*160*sizeof(float). - Giá trị của
rawDepthImagephải làNULLnếu XrDepthSwapchainCreateInfoANDROID ::createFlagskhông bao gồmXR_DEPTH_SWAPCHAIN_CREATE_RAW_DEPTH_IMAGE_BIT_ANDROID. - Giá trị của
rawDepthConfidenceImagephải làNULLnếu XrDepthSwapchainCreateInfoANDROID ::createFlagskhông bao gồmXR_DEPTH_SWAPCHAIN_CREATE_RAW_CONFIDENCE_IMAGE_BIT_ANDROID. - Giá trị của
smoothDepthImagephải làNULLnếu XrDepthSwapchainCreateInfoANDROID ::createFlagskhông bao gồmXR_DEPTH_SWAPCHAIN_CREATE_SMOOTH_DEPTH_IMAGE_BIT_ANDROID. - Giá trị của
smoothDepthImagephải làNULLnếu XrDepthSwapchainCreateInfoANDROID ::createFlagskhông bao gồmXR_DEPTH_SWAPCHAIN_CREATE_SMOOTH_CONFIDENCE_IMAGE_BIT_ANDROID.
Cách sử dụng hợp lệ (ngầm)
- Bạn phải bật tiện ích
XR_ANDROID_depth_texturetrước khi sử dụng XrDepthSwapchainImageANDROID -
typephải làXR_TYPE_DEPTH_SWAPCHAIN_IMAGE_ANDROID -
nextphải làNULLhoặc một 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ả về tham số
depthSwapchainlà một trình xử lý XrDepthSwapchainANDROID cho hình ảnh độ sâu.acquireInfolà một XrDepthAcquireInfoANDROID chứa thông tin về cách thu thập hình ảnh chiều sâu.acquireResultlà XrDepthAcquireResultANDROID được trả về, chứa thông tin về hình ảnh độ sâu đã thu được.
Các ứng dụng có thể sử dụng hàm xrAcquireDepthSwapchainImagesANDROID để lấy chỉ mục hình ảnh swapchain mới nhất hiện có, tức là XrDepthAcquireResultANDROID :: acquiredIndex , vào mảng XrDepthSwapchainImageANDROID được liệt kê theo xrEnumerateDepthSwapchainImagesANDROID. XrDepthAcquireResultANDROID được trả về cũng chứa các thông tin khác, chẳng hạn như trường nhìn và tư thế cần thiết để diễn giải dữ liệu độ sâu. Bạn có thể đọc từ khe cắm đã nhận được trong mảng hình ảnh cho đến khi gọi xrAcquireDepthSwapchainImagesANDROID tiếp theo .
Không được có quá 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.
- Thời gian chạy có thể chặn nếu thời gian chạy vẫn đang sử dụng các hình ảnh swapchain đã nhận trước đó.
- Thời gian chạy phải trả về
XR_ERROR_CALL_ORDER_INVALIDnếu xrAcquireDepthSwapchainImagesANDROID được gọi trước xrBeginFrame hoặc sau xrEndFrame . - Thời gian chạy phải trả về
XR_ERROR_LIMIT_REACHEDnếu xrAcquireDepthSwapchainImagesANDROID được gọi nhiều lần cho mỗi khung hình – tức là trong một phiên đang chạy, sau khi gọi xrBeginFrame mà chưa có xrEndFrame được liên kết. - Thời gian chạy có thể trả về
XR_ERROR_DEPTH_NOT_AVAILABLE_ANDROIDnếu dữ liệu độ sâu môi trường chưa có. Nếu điều này xảy ra, ứng dụng phải gọi lại xrAcquireDepthSwapchainImagesANDROID ở một khung hình sau.
Cách sử dụng hợp lệ (ngầm)
- Bạn phải bật tiện ích
XR_ANDROID_depth_texturetrước khi gọi xrAcquireDepthSwapchainImagesANDROID -
depthSwapchainphải là một đối tượng XrDepthSwapchainANDROID hợp lệ -
acquireInfophải là con trỏ đến một cấu trúc XrDepthAcquireInfoANDROID hợp lệ -
acquireResultphải là con trỏ đến cấu trúc XrDepthAcquireResultANDROID
Mã trả về
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
Cấu trúc XrDepthAcquireInfoANDROID được xác định như sau:
typedef struct XrDepthAcquireInfoANDROID {
XrStructureType type;
const void* next;
XrSpace space;
XrTime displayTime;
} XrDepthAcquireInfoANDROID;
Nội dung mô tả thành viên
typelà XrStructureType của cấu trúc này.nextlàNULLhoặc con 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.spacelà một XrSpace xác định khung tham chiếu của tư thế được trả về trong XrDepthAcquireResultANDROID ::views.displayTimelà mộtXrTimechỉ định thời gian dùng để tính toán tư thế cho tư thế được trả về trong XrDepthAcquireResultANDROID ::views. Các ứ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)
- Bạn phải bật tiện ích
XR_ANDROID_depth_texturetrước khi sử dụng XrDepthAcquireInfoANDROID -
typephải làXR_TYPE_DEPTH_ACQUIRE_INFO_ANDROID -
nextphải làNULLhoặc một con trỏ hợp lệ đến cấu trúc tiếp theo trong chuỗi cấu trúc -
spacephải là một đối tượng XrSpace hợp lệ
Cấu trúc XrDepthAcquireResultANDROID được xác định như sau:
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
typelà XrStructureType của cấu trúc này.nextlàNULLhoặc con 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.acquiredIndexlà chỉ mục của hoạ tiết thu được trong mảng XrDepthSwapchainImageANDROID do xrEnumerateDepthSwapchainImagesANDROID liệt kê .exposureTimestamplàXrTimechỉ định thời gian chụp bản đồ độ sâu.viewslà 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)
- Bạn phải bật tiện ích
XR_ANDROID_depth_texturetrước khi sử dụng XrDepthAcquireResultANDROID -
typephải làXR_TYPE_DEPTH_ACQUIRE_RESULT_ANDROID -
nextphải làNULLhoặc một 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
viewsphải là một cấu trúc XrDepthViewANDROID hợp lệ
Cấu trúc XrDepthViewANDROID được xác định như sau:
typedef struct XrDepthViewANDROID {
XrStructureType type;
const void* next;
XrFovf fov;
XrPosef pose;
} XrDepthViewANDROID;
Nội dung mô tả thành viên
typelà XrStructureType của cấu trúc này.nextlàNULLhoặc con 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.fovlà một XrFovf chỉ định trường nhìn được dùng để tạo chế độ xem này. Khung hiển thị không bao giờ bị lật theo chiều ngang hay chiều dọc.poselà một XrPosef chỉ định tư thế mà từ đó 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)
- Bạn phải bật tiện ích
XR_ANDROID_depth_texturetrước khi sử dụng XrDepthViewANDROID -
typephải làXR_TYPE_DEPTH_VIEW_ANDROID -
nextphải làNULLhoặc một con trỏ hợp lệ đến cấu trúc tiếp theo trong chuỗi cấu trúc
Mã ví dụ để theo dõi độ sâu
Đoạn mã ví dụ sau đây minh hoạ cách thu thập hình ảnh độ sâu và sử dụng các giá trị độ sâu để ánh xạ toạ độ hình ảnh độ sâu vào không gian trên vùng hiển thị.
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
// ...
}
Các loại đối tượng mới
Lệnh mới
- xrAcquireDepthSwapchainImagesANDROID
- xrCreateDepthSwapchainANDROID
- xrDestroyDepthSwapchainANDROID
- xrEnumerateDepthResolutionsANDROID
- xrEnumerateDepthSwapchainImagesANDROID
Cấu trúc mới
- XrDepthAcquireInfoANDROID
- XrDepthAcquireResultANDROID
- XrDepthSwapchainCreateInfoANDROID
- XrDepthSwapchainImageANDROID
- XrDepthViewANDROID
Mở rộng XrSystemProperties :
Enum mới
Mặt nạ bit mới
Hằng số Enum mới
XR_ANDROID_DEPTH_TEXTURE_EXTENSION_NAMEXR_ANDROID_depth_texture_SPEC_VERSIONMở rộng XrObjectType :
XR_OBJECT_TYPE_DEPTH_SWAPCHAIN_ANDROID
Mở rộng XrResult :
XR_ERROR_DEPTH_NOT_AVAILABLE_ANDROID
Mở rộng 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
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