XR_ANDROID_trackables_object OpenXR 확장 프로그램

이름 문자열

XR_ANDROID_trackables_object

확장 프로그램 유형

인스턴스 연장

등록된 부속 번호

467

버전

1

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

XR_ANDROID_trackables

최종 수정일

2024-11-01

IP 상태

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

도움을 주신 분들

디에고 티팔디, Google

데이비드 조셉 탄, Google

크리스토퍼 도어, Google

스펜서 퀸, Google

재러드 파인더, Google

레바나 첸, Google

케니 베르카머, Google

개요

이 확장 프로그램은 실제 물체 추적을 지원합니다. 예를 들어 키보드, 마우스, 환경의 기타 객체가 있습니다.

객체 추적

이 확장 프로그램은 XrTrackableTypeANDROIDXR_TRACKABLE_TYPE_OBJECT_ANDROID를 추가합니다.

애플리케이션은 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입니다.
  • nextNULL 또는 구조 체인의 다음 구조에 대한 포인터입니다. 핵심 OpenXR 또는 이 확장 프로그램에는 이러한 구조가 정의되어 있지 않습니다.
  • labelCountactiveLabels의 개수입니다.
  • activeLabels는 추적에서 활성 객체를 나타내는 XRObjectLabelANDROID 배열에 대한 포인터입니다.

애플리케이션은 다음 XrTrackableTrackerCreateInfoANDROID 체인에 XrTrackableObjectConfigurationANDROID를 추가하여 추가 구성을 설정할 있습니다. xrGetAllTrackablesANDROID의 출력은 activeLabels와 일치하도록 필터링됩니다.

애플리케이션에서 XrTrackableObjectConfigurationANDROID를 설정하지 않으면 시스템에서 식별한 모든 객체가 추적됩니다.

유효한 사용 (암시적)

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;

추적 가능한 객체 가져오기

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

회원 설명

유효한 사용 (암시적)

추적 가능한 객체를 가져오는 코드 예시

다음 코드 예는 추적 가능한 객체를 가져오는 방법을 보여줍니다.

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);

새로운 enum 상수

XrStructureType 열거형이 다음과 같이 확장되었습니다.

  • XR_TYPE_TRACKABLE_OBJECT_ANDROID
  • XR_TYPE_TRACKABLE_OBJECT_CONFIGURATION_ANDROID

XrTrackableTypeANDROID 열거형이 다음과 같이 확장되었습니다.

  • XR_TRACKABLE_TYPE_OBJECT_ANDROID

새로운 enum

새로운 구조

새로운 함수

문제

버전 기록

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

OpenXR™ 및 OpenXR 로고는 Khronos Group Inc. 소유의 상표이며 중국, 유럽연합, 일본, 영국에서 상표로 등록되어 있습니다.