名稱字串
XR_ANDROID_trackables_object
擴充功能類型
執行個體擴充功能
已註冊的擴充號碼
467
修訂版本
1
擴充功能和版本依附元件
上次修改日期
2024-11-01
IP 狀態
未發現任何 IP 版權聲明。
著作人
Diego Tipaldi,Google
Google 的 David Joseph Tan
Christopher Doer,Google
Spencer Quin,Google
Jared Finder,Google
Levana Chen,Google
Google 的 Kenny Vercaemer
總覽
這項擴充功能可追蹤實體物件。例如鍵盤、滑鼠和環境中的其他物品。
追蹤物件
這個擴充功能會將 XR_TRACKABLE_TYPE_OBJECT_ANDROID 新增至 XrTrackableTypeANDROID。
應用程式可能會呼叫 xrCreateTrackableTrackerANDROID,並在 XrTrackableTrackerCreateInfoANDROID::trackableType 中將 XR_TRACKABLE_TYPE_OBJECT_ANDROID 指定為可追蹤類型,藉此建立 XrTrackableTrackerANDROID 來追蹤物件。
XrTrackableObjectConfigurationANDROID 結構的定義如下:
typedef struct XrTrackableObjectConfigurationANDROID {
    XrStructureType                type;
    void*                          next;
    uint32_t                       labelCount;
    const XrObjectLabelANDROID*    activeLabels;
} XrTrackableObjectConfigurationANDROID;
成員說明
- type是這個結構的- XrStructureType。
- next是- NULL或結構鏈結中下一個結構的指標。核心 OpenXR 或這個擴充功能中並未定義這類結構。
- labelCount是- activeLabels的計數。
- activeLabels是指向- XRObjectLabelANDROID陣列的指標,用於指出追蹤中的有效物件。
應用程式可能會在下一個 XrTrackableTrackerCreateInfoANDROID 鏈結中新增 XrTrackableObjectConfigurationANDROID,藉此設定其他設定。xrGetAllTrackablesANDROID 的輸出內容會篩選為符合 activeLabels。
如果應用程式未設定 XrTrackableObjectConfigurationANDROID,系統會追蹤所有已識別的物件。
有效用法 (暗示)
- 您必須先啟用 XR_ANDROID_trackables_object擴充功能,才能使用XrTrackableObjectANDROID
- type必須為- XR_TYPE_TRACKABLE_OBJECT_ANDROID
- next必須為- NULL,或指向結構體鏈結中下一個結構體的有效指標
- activeLabels必須是指向- labelCount有效- XrObjectLabelANDROID值陣列的指標
- labelCount參數必須大於- 0
XrObjectLabelANDROID 列舉是 XrTrackableANDROID 物件的標籤。
typedef enum XrObjectLabelANDROID {
    XR_OBJECT_LABEL_UNKNOWN_ANDROID = 0,
    XR_OBJECT_LABEL_KEYBOARD_ANDROID = 1,
    XR_OBJECT_LABEL_MOUSE_ANDROID = 2,
    XR_OBJECT_LABEL_LAPTOP_ANDROID = 3,
    XR_OBJECT_LABEL_MAX_ENUM_ANDROID = 0x7FFFFFFF
} XrObjectLabelANDROID;
取得可追蹤物件
xrGetTrackableObjectANDROID 函式的定義如下:
XrResult xrGetTrackableObjectANDROID(
    XrTrackableTrackerANDROID                   tracker,
    const XrTrackableGetInfoANDROID*            getInfo,
    XrTrackableObjectANDROID*                   objectOutput);
參數說明
- tracker是查詢的- XrTrackableTrackerANDROID。
- getInfo是- XrTrackableGetInfoANDROID,其中包含用於取得可追蹤物件的資訊。
- objectOutput是指向- XrTrackableObjectANDROID結構的指標,其中會傳回可追蹤的物件。
如果 XrTrackableANDROID 的可追蹤類型不是 XR_TRACKABLE_TYPE_OBJECT_ANDROID,或是 XrTrackableTrackerANDROID 的可追蹤類型不是 XR_TRACKABLE_TYPE_OBJECT_ANDROID,系統會傳回 XR_ERROR_MISMATCHING_TRACKABLE_TYPE_ANDROID。
有效用法 (暗示)
- 必須先啟用 XR_ANDROID_trackables_object擴充功能,才能呼叫xrGetTrackableObjectANDROID
- tracker必須為有效的- XrTrackableTrackerANDROID帳號
- getInfo必須是指向有效- XrTrackableGetInfoANDROID結構體的指標
- objectOutput必須是- XrTrackableObjectANDROID結構體的指標
傳回代碼
- 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_SESSION_NOT_RUNNING
- XR_ERROR_TIME_INVALID
- XR_ERROR_MISMATCHING_TRACKABLE_TYPE_ANDROID
XrTrackableObjectANDROID 結構的定義如下:
typedef struct XrTrackableObjectANDROID {
    XrStructureType           type;
    void*                     next;
    XrTrackingStateANDROID    trackingState;
    XrPosef                   centerPose;
    XrExtent3DfEXT            extents;
    XrObjectLabelANDROID      objectLabel;
    XrTime                    lastUpdatedTime;
} XrTrackableObjectANDROID;
成員說明
- type是這個結構的- XrStructureType。
- next是- NULL或結構鏈結中下一個結構的指標。核心 OpenXR 或這個擴充功能中並未定義這類結構。
- trackingState是物件的- XrTrackingStateANDROID。
- centerPose是位於- XrTrackableGetInfoANDROID::baseSpace中的物件的- XrPosef。
- extents是物件的- XrExtent3DfEXT維度。
- objectLabel是這個物件在執行階段所決定的- XrObjectLabelANDROID。
- lastUpdatedTime是物件上次更新的- XrTime。
有效用法 (暗示)
- 您必須先啟用 XR_ANDROID_trackables_object擴充功能,才能使用XrTrackableObjectANDROID
- type必須為- XR_TYPE_TRACKABLE_OBJECT_ANDROID
- next必須為- NULL,或結構體鏈結中下一個結構體的有效指標
- trackingState必須是有效的- XrTrackingStateANDROID值
- objectLabel必須是有效的- XrObjectLabelANDROID值
取得可追蹤物件的程式碼範例
以下程式碼範例說明如何取得可追蹤的物件。
XrSession session; // previously initialized
// The function pointers are previously initialized using xrGetInstanceProcAddr.
PFN_xrCreateTrackableTrackerANDROID xrCreateTrackableTrackerANDROID; // previously initialized
PFN_xrGetAllTrackablesANDROID xrGetAllTrackablesANDROID; // previously initialized
PFN_xrGetTrackableObjectANDROID xrGetTrackableObjectANDROID; // previously initialized
PFN_xrDestroyTrackableTrackerANDROID xrDestroyTrackableTrackerANDROID; // previously initialized
XrTime updateTime; // Time used for the current frame's simulation update.
XrSpace appSpace; // Space created for XR_REFERENCE_SPACE_TYPE_LOCAL.
XrTrackableTrackerCreateInfoANDROID
  createInfo{XR_TYPE_TRACKABLE_TRACKER_CREATE_INFO_ANDROID};
createInfo.trackableType = XR_TRACKABLE_TYPE_OBJECT_ANDROID;
XrTrackableTrackerANDROID objectTrackableTracker;
XrResult result = xrCreateTrackableTrackerANDROID(
  session,
  &createInfo,
  &objectTrackableTracker);
if (result != XR_SUCCESS) { /* Handle failures. */ }
uint32_t trackableCountOutput = 0;
std::vector<XrTrackableANDROID> allObjectTrackables;
// Query the number of trackables available.
result = xrGetAllTrackablesANDROID(
  objectTrackableTracker,
  0,
  &trackableCountOutput,
  nullptr
);
if (result == XR_SUCCESS) {
  allObjectTrackables.resize(trackableCountOutput, XR_NULL_TRACKABLE_ANDROID);
  // Fetch the actual trackable handles in the appropriately resized array.
  result = xrGetAllTrackablesANDROID(
    objectTrackableTracker,
    trackableCountOutput,
    &trackableCountOutput,
    allObjectTrackables.data());
  if (result == XR_SUCCESS) {
    for (XrTrackableANDROID trackable : allObjectTrackables) {
      // Object trackable query information
      XrTrackableGetInfoANDROID objectGetInfo;
      objectGetInfo.type = XR_TYPE_TRACKABLE_GET_INFO_ANDROID;
      objectGetInfo.next = nullptr;
      objectGetInfo.trackable = trackable;
      objectGetInfo.baseSpace = appSpace;
      objectGetInfo.time = updateTime;
      // Get the object trackable. Note that the tracker only returns object types.
      XrTrackableObjectANDROID object = { XR_TYPE_TRACKABLE_OBJECT_ANDROID };
      result = xrGetTrackableObjectANDROID(
        objectTrackableTracker,
        &objectGetInfo,
        &object
      );
      if (result == XR_SUCCESS) {
        /** Do Stuff with the object */
      }
    }
  }
}
// Release trackable tracker.
result = xrDestroyTrackableTrackerANDROID(objectTrackableTracker);
新列舉常數
XrStructureType 列舉已擴充以下項目:
- XR_TYPE_TRACKABLE_OBJECT_ANDROID
- XR_TYPE_TRACKABLE_OBJECT_CONFIGURATION_ANDROID
XrTrackableTypeANDROID 列舉已擴充以下項目:
- XR_TRACKABLE_TYPE_OBJECT_ANDROID
新列舉項目
新結構體
新函式
問題
版本記錄
- 修訂版本 1,2024 年 10 月 3 日 (Kenny Vercaemer)
- 初始擴充功能說明。
 
OpenXR™ 和 OpenXR 標誌是 The Khronos Group Inc. 擁有的商標,並已在中國、歐盟、日本和英國註冊為商標。
