افزونه XR_ANDROID_trackables OpenXR

رشته نام

XR_ANDROID_trackables_object

نوع پسوند

پسوند نمونه

شماره برنامه افزودنی ثبت شده

467

تجدید نظر

1

وابستگی های افزونه و نسخه

XR_ANDROID_trackables

آخرین تاریخ اصلاح

03-10-2024

وضعیت IP

هیچ ادعای IP شناخته شده ای وجود ندارد.

مشارکت کنندگان

اسپنسر کوین، گوگل

نیهاو جین، گوگل

جان پورسی، گوگل

جارد فایندر، گوگل

لوانا چن، گوگل

کنی ورکامر، گوگل

نمای کلی

این افزونه ردیابی جسم فیزیکی را امکان پذیر می کند. به عنوان مثال، صفحه کلید، ماوس و سایر اشیاء موجود در محیط.

ردیابی اشیاء

این برنامه افزودنی XR_TRACKABLE_TYPE_OBJECT_ANDROID را به XrTrackableTypeANDROID اضافه می کند.

برنامه ممکن است با فراخوانی xrCreateTrackableTrackerANDROID و تعیین XR_TRACKABLE_TYPE_OBJECT_ANDROID به عنوان نوع قابل ردیابی در XrTrackableTrackerCreateInfoANDROID::trackableType، یک 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 این ساختار است.
    • next NULL یا اشاره گر به ساختار بعدی در زنجیره ساختار است. چنین ساختاری در هسته OpenXR یا این پسوند تعریف نشده است.
    • trackingState XrTrackingStateANDROID شی است.
    • centerPose XrPosef شی واقع در XrTrackableGetInfoANDROID::baseSpace است.
    • extents بعد XrExtent3DfEXT شی است.
    • objectLabel XrObjectLabelANDROID است که زمان اجرا برای این شی تعیین کرده است.
    • lastUpdatedTime XrTime آخرین به روز رسانی شی است.

استفاده معتبر (ضمنی)

فهرست 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);

ثابت های جدید Enum

شمارش XrStructureType با:

  • XR_TYPE_TRACKABLE_OBJECT_ANDROID
  • XR_TYPE_TRACKABLE_OBJECT_CONFIGURATION_ANDROID

شمارش XrTrackableTypeANDROID با:

  • XR_TRACKABLE_TYPE_OBJECT_ANDROID

فهرست های جدید

ساختارهای جدید

توابع جدید

مسائل

تاریخچه نسخه

  • بازبینی 1، 03/10/2024 (کنی ورکامر)
    • توضیحات پسوند اولیه