XR_ANDROID_trackables OpenXR 확장 프로그램

이름 문자열

XR_ANDROID_trackables_object

확장 프로그램 유형

인스턴스 연장

등록된 부속 번호

467

버전

1

확장 프로그램 및 버전 종속 항목

XR_ANDROID_trackables

최종 수정일

2024-10-03

IP 상태

알려진 IP 소유권 주장이 없습니다.

도움을 주신 분들

스펜서 퀸, Google

니하브 자인, Google

존 퍼시, Google

재러드 파인더, Google

레바나 첸, Google

케니 베르카머, 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;

회원 설명

유효한 사용 (암시적)

XrObjectLabelANDROID enum은 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

새로운 enum

새로운 구조

새로운 함수

문제

버전 기록

  • 버전 1, 2024년 10월 3일 (케니 베르카이머)
    • 초기 확장 프로그램 설명