이름 문자열
XR_ANDROID_trackables_object
확장 프로그램 유형
인스턴스 연장
등록된 부속 번호
467
버전
1
확장 프로그램 및 버전 종속 항목
최종 수정일
2024-10-03
IP 상태
알려진 IP 소유권 주장이 없습니다.
도움을 주신 분들
스펜서 퀸, Google
Nihav Jain, Google
존 퍼시, Google
자레드 파인더, Google
레바나 첸, Google
케니 베르카머, Google
개요
이 확장 프로그램은 실제 물체 추적을 지원합니다. 예를 들어 키보드, 마우스, 환경의 기타 객체가 여기에 해당합니다.
객체 추적
이 확장 프로그램은 XrTrackableTypeANDROID에 XR_TRACKABLE_TYPE_OBJECT_ANDROID
를 추가합니다.
애플리케이션은 xrCreateTrackableTrackerANDROID를 호출하고 XrTrackableTrackerCreateInfoANDROID::trackableType에서 추적 가능한 유형으로 XR_TRACKABLE_TYPE_OBJECT_ANDROID
를 지정하여 XrTrackableTrackerANDROID를 만들 수 있습니다. 그러면 객체를 추적할 수 있습니다.
추적 가능한 객체 가져오기
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
이 반환됩니다.
유효한 사용 (암시적)
- xrGetTrackableObjectANDROID를 호출하기 전에
XR_ANDROID_trackables_object
확장 프로그램을 사용 설정해야 합니다. 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
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
입니다.
유효한 사용 (암시적)
- XrTrackableObjectANDROID를 사용하기 전에
XR_ANDROID_trackables_object
확장 프로그램을 사용 설정해야 합니다. type
은XR_TYPE_TRACKABLE_OBJECT_ANDROID
여야 합니다.next
는NULL
이거나 구조 체인의 다음 구조체에 대한 유효한 포인터여야 함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);
새로운 enum 상수
XrStructureType 열거형이 다음과 같이 확장됩니다.
XR_TYPE_TRACKABLE_OBJECT_ANDROID
XR_TYPE_TRACKABLE_OBJECT_CONFIGURATION_ANDROID
XrTrackableTypeANDROID 열거형이 다음과 같이 확장됩니다.
XR_TRACKABLE_TYPE_OBJECT_ANDROID
새로운 enum
새로운 구조
새로운 함수
문제
버전 기록
- 버전 1, 2024년 10월 3일 (케니 베르카머)
- 초기 확장 프로그램 설명