XR_ANDROID_trackables OpenXR 拡張機能

名前の文字列

XR_ANDROID_trackables_object

拡張機能の種類

インスタンスの拡張

登録されている電話番号

467

リビジョン

1

拡張機能とバージョンの依存関係

XR_ANDROID_trackables

最終更新日

2024-10-03

IP ステータス

既知の IP に関する申し立てはありません。

寄与者

Spencer Quin、Google

Nihav Jain、Google

John Pursey、Google

Jared Finder、Google

Levana Chen、Google

Kenny Vercaemer、Google

概要

この拡張機能を使用すると、物理的なオブジェクトの追跡が可能になります。たとえば、キーボード、マウス、環境内の他のオブジェクトなどです。

オブジェクトを追跡する

この拡張機能により、XrTrackableTypeANDROIDXR_TRACKABLE_TYPE_OBJECT_ANDROID が追加されます。

アプリケーションは、xrCreateTrackableTrackerANDROID を呼び出し、XrTrackableTrackerCreateInfoANDROID::trackableType でトラッキング可能なタイプとして XR_TRACKABLE_TYPE_OBJECT_ANDROID を指定して、XrTrackableTrackerANDROID を作成してオブジェクトをトラッキングできます。

トラッキング可能なオブジェクトを取得する

xrGetTrackableObjectANDROID 関数は次のように定義されます。

XrResult xrGetTrackableObjectANDROID(
    XrTrackableTrackerANDROID                   tracker,
    const XrTrackableGetInfoANDROID*            getInfo,
    XrTrackableObjectANDROID*                   objectOutput);

パラメータの説明

XrTrackableANDROID のトラッキング可能タイプが XR_TRACKABLE_TYPE_OBJECT_ANDROID でない場合、または XrTrackableTrackerANDROID のトラッキング可能タイプが XR_TRACKABLE_TYPE_OBJECT_ANDROID でない場合は、XR_ERROR_MISMATCHING_TRACKABLE_TYPE_ANDROID が返されます。

有効な使用方法(暗黙的)

戻りコード

成功

  • 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

XrTrackableObjectANDROID 構造体は次のように定義されます。

typedef struct XrTrackableObjectANDROID {
    XrStructureType           type;
    void*                     next;
    XrTrackingStateANDROID    trackingState;
    XrPosef                   centerPose;
    XrExtent3DfEXT            extents;
    XrObjectLabelANDROID      objectLabel;
    XrTime                    lastUpdatedTime;
} XrTrackableObjectANDROID;

メンバーの説明

  • type は、この構造の XrStructureType です。
    • nextNULL または構造体チェーンの次の構造体へのポインタです。コア OpenXR またはこの拡張機能では、そのような構造は定義されていません。
    • trackingState は、オブジェクトの XrTrackingStateANDROID です。
    • centerPose は、XrTrackableGetInfoANDROID::baseSpace にあるオブジェクトの XrPosef です。
    • extents は、オブジェクトの XrExtent3DfEXT ディメンションです。
    • objectLabel は、ランタイムがこのオブジェクトに対して決定した XrObjectLabelANDROID です。
    • lastUpdatedTime は、オブジェクトの最終更新の XrTime です。

有効な使用方法(暗黙的)

  • XrTrackableObjectANDROID を使用する前に、XR_ANDROID_trackables_object 拡張機能を有効にする必要があります。
    • typeXR_TYPE_TRACKABLE_OBJECT_ANDROID にする必要があります
    • nextNULL または構造体チェーンの次の構造体への有効なポインタである必要があります。
    • trackingState は有効な XrTrackingStateANDROID 値である必要があります。
    • objectLabel は有効な XrObjectLabelANDROID 値である必要があります

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;

トラッキング可能なオブジェクトを取得するサンプルコード

次のサンプルコードは、トラッキング可能なオブジェクトを取得する方法を示しています。

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;
XrTrackableTracker objectTrackableTracker;
XrResult result = xrCreateTrackableTrackerANDROID(
  session,
  &createInfo,
  &objectrackableTracker);
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.space = 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)
    • 最初の拡張機能の説明。