XR_ANDROID_depth_texture

Name String

XR_ANDROID_depth_texture

Loại tiện ích

Phần mở rộng thực thể

Số máy lẻ đã đăng ký

703

Bản sửa đổi

1

Trạng thái phê chuẩn

Chưa được phê chuẩn

Phần phụ thuộc của tiện ích và phiên bản

OpenXR 1.0

Ngày sửa đổi gần đây nhất

2024-09-11

Trạng thái IP

Không có tuyên bố nào về tài sản 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 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 cho các nhiệm vụ cụ thể, thử nghiệm nhấn và các nhiệm vụ cụ thể khác tận 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.

Lưu ý

Bản đồ độ sâu được tạo bằng thời gian chạy và chia sẻ với ứng dụng bằng XrDepthSwapchainANDROID . Môi trường thời gian chạy không được thay đổi độ phân giải hình ảnh chiều sâu được trả về thông qua xrEnumerateDepthResolutionsANDROID trong suốt thời gian hoạt động của ứng dụng.

Quyền

Tiện ích này hiển thị kết cấu độ sâu được lấy mẫu giảm để giảm thiểu mối lo ngại về Thông tin nhận dạng cá nhân (PII). Ứng dụng Android phải có quyền android.permission.SCENE_UNDERSTANDING_FINE 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à quyền nguy hiểm. Ứng dụng phải yêu cầu quyền trong thời gian chạy để sử dụng các hàm sau:

(mức độ bảo vệ: nguy hiểm)

Kiểm tra chức năng của hệ thống

Cấu trúc XrSystemDepthTrackingPropertiesANDROID được định nghĩa như sau:

typedef struct XrSystemDepthTrackingPropertiesANDROID {
    XrStructureType    type;
    void*              next;
    XrBool32           supportsDepthTracking;
} XrSystemDepthTrackingPropertiesANDROID;

Nội dung mô tả về 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à một 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ó 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 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 ẩn)

Độ phân giải chiều sâu truy vấn

Hàm xrEnumerateDepthResolutionsANDROID được định nghĩa như sau:

XrResult xrEnumerateDepthResolutionsANDROID(
    XrSession                                   session,
    uint32_t                                    resolutionCapacityInput,
    uint32_t*                                   resolutionCountOutput,
    XrDepthCameraResolutionANDROID*             resolutions);

Nội dung mô tả về 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ủa resolutions hoặc 0 để truy xuất dung lượng cần thiết.
  • resolutionCountOutput là con trỏ đến số lượng uint64_t resolutions được ghi hoặc con trỏ đến dung lượng cần thiết trong trường hợp resolutionCapacityInput không đủ.
  • resolutions là con trỏ đến một mảng XrDepthCameraResolutionANDROID , nhưng có thể là NULL nếu resolutionCapacityInput là 0 .
  • Hãy xem phần Tham số dung lượng bộ nhớ đệm để biết nội dung mô tả chi tiết về cách truy xuất kích thước resolutions cầ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ừ lựa chọn ưu tiên cao nhất đến thấp nhất trong thời gian chạy. Ứ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.

Môi trường thời gian chạy phải luôn trả về nội dung vùng đệm giống hệt nhau từ bảng liệt kê này trong suốt thời gian hoạt động của 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 xrEnumerateDepthResolutionsANDROID
  • session phải là một tên người dùng 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à một con trỏ đến một mảng gồm các giá trị resolutionCapacityInput XrDepthCameraResolutionANDROID

Mã trả về

Thành công

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Không thành công

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_SIZE_INSUFFICIENT
  • XR_ERROR_VALIDATION_FAILURE

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,
    XR_DEPTH_CAMERA_RESOLUTION_MAX_ENUM_ANDROID = 0x7FFFFFFF
} XrDepthCameraResolutionANDROID;

Nội dung mô tả về giá trị 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 chuỗi hoán đổi độ sâu

XR_DEFINE_HANDLE(XrDepthSwapchainANDROID)

XrDepthSwapchainANDROID là một tay điều khiển chuỗi hoán đổi độ sâu.

Hàm xrCreateDepthSwapchainANDROID được định nghĩa như sau:

XrResult xrCreateDepthSwapchainANDROID(
    XrSession                                   session,
    const XrDepthSwapchainCreateInfoANDROID*    createInfo,
    XrDepthSwapchainANDROID*                    swapchain);

Nội dung mô tả về tham số

  • session là XrSession tạo chuỗi hoán đổi độ sâu.
  • createInfo là con trỏ đến cấu trúc XrDepthSwapchainCreateInfoANDROID chứa các tham số dùng để tạo chuỗi hoán đổi.
  • swapchain là con trỏ đến một tay điều khiển mà trong đó XrDepthSwapchainANDROID đã tạo đượ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à hình ảnh độ tin cậy.

  • Thời gian chạy phải trả về XR_ERROR_FEATURE_UNSUPPORTED nế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_INSUFFICIENT nế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_FAILURE nế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ỉ nên tạo hình ảnh độ tin cậy về độ sâu khi các bit tương ứng được đặt cho createInfo khi tạo chuỗi hoán đổi.

Sau đó, bạn có thể sử dụng tay điều khiển 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 tay điều khiển XrDepthSwapchainANDROID thông qua hàm xrDestroyDepthSwapchainANDROID.

Cách sử dụng hợp lệ (Ngầm ẩn)

Mã trả về

Thành công

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Không thành công

  • XR_ERROR_FEATURE_UNSUPPORTED
  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_LIMIT_REACHED
  • XR_ERROR_OUT_OF_MEMORY
  • XR_ERROR_PERMISSION_INSUFFICIENT
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SESSION_LOST

Cấu trúc XrDepthSwapchainCreateInfoANDROID được định nghĩa như sau:

typedef struct XrDepthSwapchainCreateInfoANDROID {
    XrStructureType                       type;
    const void*                           next;
    XrDepthCameraResolutionANDROID        resolution;
    XrDepthSwapchainCreateFlagsANDROID    createFlags;
} XrDepthSwapchainCreateInfoANDROID;

Nội dung mô tả về 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à kết cấu độ sâu và độ tin cậy được tạo bằng.
  • 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)

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ằng 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;

Nội dung mô tả cờ

  • XR_DEPTH_SWAPCHAIN_CREATE_SMOOTH_DEPTH_IMAGE_BIT_ANDROID — Cho biết chuỗi hoán đổi sẽ cung cấp hình ảnh có chiều sâu mượt mà.
  • XR_DEPTH_SWAPCHAIN_CREATE_SMOOTH_CONFIDENCE_IMAGE_BIT_ANDROID — Cho biết chuỗi hoán đổi sẽ cung cấp hình ảnh độ tin cậy về độ sâu mượt mà.
  • XR_DEPTH_SWAPCHAIN_CREATE_RAW_DEPTH_IMAGE_BIT_ANDROID — Cho biết chuỗi hoán đổi sẽ cung cấp hình ảnh độ sâu thô.
  • XR_DEPTH_SWAPCHAIN_CREATE_RAW_CONFIDENCE_IMAGE_BIT_ANDROID — Cho biết chuỗi hoán đổi sẽ cung cấp hình ảnh độ tin cậy về độ sâu thô.

Hàm xrDestroyDepthSwapchainANDROID được định nghĩa như sau:

XrResult xrDestroyDepthSwapchainANDROID(
    XrDepthSwapchainANDROID                     swapchain);

Nội dung mô tả về tham số

Hàm xrDestroyDepthSwapchainANDROID 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 liên quan.

Cách sử dụng hợp lệ (Ngầm ẩn)

Độ an toàn cho chuỗi

  • 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ề

Thành công

  • XR_SUCCESS

Không thành công

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_RUNTIME_FAILURE

Truy cập vào kết cấu chiều sâu

Hàm xrEnumerateDepthSwapchainImagesANDROID được định nghĩa như sau:

XrResult xrEnumerateDepthSwapchainImagesANDROID(
    XrDepthSwapchainANDROID                     depthSwapchain,
    uint32_t                                    depthImageCapacityInput,
    uint32_t*                                   depthImageCountOutput,
    XrDepthSwapchainImageANDROID*               depthImages);

Nội dung mô tả về tham số

  • depthSwapchain là XrDepthSwapchainANDROID để lấy hình ảnh.
  • depthImageCapacityInput là dung lượng của mảng depthImages 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ượng depthImages được ghi hoặc con trỏ đến dung lượng cần thiết trong trường hợp depthImageCapacityInput 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ếu depthImageCapacityInput là 0.
  • Hãy xem phần Tham số dung lượng bộ nhớ đệm để biết nội dung mô tả chi tiết về cách truy xuất kích thước depthImages cần thiết.

xrEnumerateDepthSwapchainImagesANDROID điền vào một mảng cấu trúc XrDepthSwapchainImageANDROID. Tài nguyên phải 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 .

Thời gian chạy phải luôn trả về nội dung vùng đệm giống hệt nhau từ bảng liệt kê này trong suốt thời gian hoạt động của chuỗi hoán đổi.

Cách sử dụng hợp lệ (Ngầm ẩn)

  • Tiện ích XR_ANDROID_depth_texture phải được bật trước khi gọi xrEnumerateDepthSwapchainImagesANDROID
  • depthSwapchain phải là một tên người dùng 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à một con trỏ đến một mảng gồm các cấu trúc depthImageCapacityInput XrDepthSwapchainImageANDROID

Mã trả về

Thành công

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Không thành công

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_SIZE_INSUFFICIENT
  • XR_ERROR_VALIDATION_FAILURE

Cấu trúc XrDepthSwapchainImageANDROID được định nghĩa 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ả về 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 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.0 cho biế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 có hiệu quả xa vô hạn,
  • rawDepthConfidenceImage là NULL hoặc con trỏ đến hình ảnh độ tin cậy về độ sâu thô cho cả chế độ xem bên trái và bên phải do thời gian chạy phân bổ.
  • smoothDepthImage là NULL hoặc con trỏ đến hình ảnh độ sâu mượt mà cho cả chế độ xem 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.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 có hiệu quả xa vô hạn.
  • smoothDepthConfidenceImage là NULL hoặc con trỏ đến hình ảnh độ tin cậy về độ sâu mượt mà cho cả chế độ xem 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 thời gian hoạt động của chuỗi hoán đổi. Sau khi chuỗi hoán đổi bị huỷ, các con trỏ sẽ được coi là lơ lửng.

XrDepthSwapchainImageANDROID đại diện cho hình ảnh độ sâu 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 :: resolution trong khi gọi xrCreateDepthSwapchainANDROID . Ví dụ: nếu XrDepthSwapchainCreateInfoANDROID :: resolution là XR_DEPTH_CAMERA_RESOLUTION_160x160_ANDROID , thì hình ảnh chiều sâu sẽ có kích thước 2*160*160*sizeof(float) .
  • Giá trị của rawDepthImage phải là NULL nếu XrDepthSwapchainCreateInfoANDROID :: createFlags không bao gồm XR_DEPTH_SWAPCHAIN_CREATE_RAW_DEPTH_IMAGE_BIT_ANDROID .
  • Giá trị của rawDepthConfidenceImage phải là NULL nếu XrDepthSwapchainCreateInfoANDROID :: createFlags không bao gồm XR_DEPTH_SWAPCHAIN_CREATE_RAW_CONFIDENCE_IMAGE_BIT_ANDROID .
  • Giá trị của smoothDepthImage phải là NULL nếu XrDepthSwapchainCreateInfoANDROID :: createFlags không bao gồm XR_DEPTH_SWAPCHAIN_CREATE_SMOOTH_DEPTH_IMAGE_BIT_ANDROID .
  • Giá trị của smoothDepthImage phải là NULL nếu XrDepthSwapchainCreateInfoANDROID :: createFlags không bao gồm XR_DEPTH_SWAPCHAIN_CREATE_SMOOTH_CONFIDENCE_IMAGE_BIT_ANDROID .

Cách sử dụng hợp lệ (Ngầm ẩn)

Hàm xrAcquireDepthSwapchainImagesANDROID được định nghĩa như sau:

XrResult xrAcquireDepthSwapchainImagesANDROID(
    XrDepthSwapchainANDROID                     depthSwapchain,
    const XrDepthAcquireInfoANDROID*            acquireInfo,
    XrDepthAcquireResultANDROID*                acquireResult);

Nội dung mô tả về tham số

Ứng dụng có thể sử dụng hàm xrAcquireDepthSwapchainImagesANDROID để lấy chỉ mục hình ảnh chuỗi hoán đổi mới nhất hiện có, tức là 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 độ sâu. Bạn có thể đọc một cách an toàn từ vùng đã lấy được trong mảng hình ảnh cho đến 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.

  • Thời gian chạy có thể chặn nếu các hình ảnh chuỗi hoán đổi đã thu nạp trước đó vẫn đang được thời gian chạy sử dụng.
  • Thời gian chạy phải trả về XR_ERROR_CALL_ORDER_INVALID nếu xrAcquireDepthSwapchainImagesANDROID được gọi trước xrBeginFrame hoặc sau xrEndFrame .
  • Thời gian chạy phải trả về XR_ERROR_LIMIT_REACHED nế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 một lệnh gọi đến xrBeginFrame chưa có xrEndFrame liên kết.
  • Thời gian chạy có thể trả về XR_ERROR_DEPTH_NOT_AVAILABLE_ANDROID nếu chưa có dữ liệu về độ sâu của môi trường. Nếu điều này xảy ra, ứng dụng nên gọi lại xrAcquireDepthSwapchainImagesANDROID ở một khung hình sau đó.

Cách sử dụng hợp lệ (Ngầm ẩn)

Mã trả về

Thành công

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Không thành công

  • XR_ERROR_CALL_ORDER_INVALID
  • XR_ERROR_DEPTH_NOT_AVAILABLE_ANDROID
  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_LIMIT_REACHED
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_TIME_INVALID
  • XR_ERROR_VALIDATION_FAILURE

Cấu trúc XrDepthAcquireInfoANDROID được định nghĩa như sau:

typedef struct XrDepthAcquireInfoANDROID {
    XrStructureType    type;
    const void*        next;
    XrSpace            space;
    XrTime             displayTime;
} XrDepthAcquireInfoANDROID;

Nội dung mô tả về 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ột XrTime 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)

Cấu trúc XrDepthAcquireResultANDROID được định nghĩa như sau:

typedef struct XrDepthAcquireResultANDROID {
    XrStructureType       type;
    const void*           next;
    uint32_t              acquiredIndex;
    XrTime                exposureTimestamp;
    XrDepthViewANDROID    views[2];
} XrDepthAcquireResultANDROID;

Nội dung mô tả về 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 kết cấu thu nạp đượ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)

Cấu trúc XrDepthViewANDROID được định nghĩa như sau:

typedef struct XrDepthViewANDROID {
    XrStructureType    type;
    const void*        next;
    XrFovf             fov;
    XrPosef            pose;
} XrDepthViewANDROID;

Nội dung mô tả về 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. Khung hiển thị không bao giờ bị 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)

Mã ví dụ để theo dõi độ sâu

Mã ví dụ sau đây minh hoạ cách lấy hình ảnh chiều sâu và sử dụng giá trị chiều sâu để liên kết toạ độ hình ảnh chiều sâu với không gian sân khấ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

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

Cấu trúc mới

Enum mới

Mặt nạ bit mới

Hằng số enum mới

  • XR_ANDROID_DEPTH_TEXTURE_EXTENSION_NAME
  • XR_ANDROID_depth_texture_SPEC_VERSION
  • Mở 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_ANDROID
    • XR_TYPE_DEPTH_ACQUIRE_RESULT_ANDROID
    • XR_TYPE_DEPTH_SWAPCHAIN_CREATE_INFO_ANDROID
    • XR_TYPE_DEPTH_SWAPCHAIN_IMAGE_ANDROID
    • XR_TYPE_DEPTH_VIEW_ANDROID
    • XR_TYPE_SYSTEM_DEPTH_TRACKING_PROPERTIES_ANDROID

Vấn đề

Danh sách 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 về tiện ích