이름 문자열
XR_ANDROID_trackables_qr_code
확장 프로그램 유형
인스턴스 확장
등록된 내선 번호
460
버전
1
확장 프로그램 및 버전 종속 항목
최종 수정일
2025-02-05
IP 상태
알려진 IP 소유권 주장이 없습니다.
도움을 주신 분들
크리스토퍼 도어, Google
레바나 첸, Google
Jared Finder, Google
스펜서 퀸, Google
니하브 제인, Google
Diego Tipaldi, Google
Ken Mackay, Google
다니엘 구텐베르그, Qualcomm
개요
이 확장 프로그램을 사용하면 실제 QR 코드 추적 및 QR 코드 데이터 디코딩이 가능합니다.
시스템 기능 검사
XrSystemQrCodeTrackingPropertiesANDROID
XrSystemQrCodeTrackingPropertiesANDROID
구조는 다음과 같이 정의됩니다.
typedef struct XrSystemQrCodeTrackingPropertiesANDROID {
XrStructureType type;
void* next;
XrBool32 supportsQrCodeTracking;
XrBool32 supportsQrCodeSizeEstimation;
uint32_t maxQrCodeCount;
} XrSystemQrCodeTrackingPropertiesANDROID;
회원 설명
type
은 이 구조의XrStructureType
입니다.next
는NULL
이거나 구조체 체인의 다음 구조체에 대한 포인터입니다. 이러한 구조는 핵심 OpenXR이나 이 확장 프로그램에 정의되어 있지 않습니다.supportsQrCodeTracking
는 현재 시스템이 QR 코드 추적 기능을 제공하는지 나타내는XrBool32
입니다.supportsQrCodeSizeEstimation
는 현재 시스템에서 QR 코드 크기 추정치를 제공하는지 여부를 나타내는XrBool32
입니다.maxQrCodeCount
은 동시에 추적할 수 있는 총 최대 QR 코드 수입니다.
애플리케이션은 xrGetSystemProperties
호출 시 XrSystemQrCodeTrackingPropertiesANDROID
구조로 XrSystemProperties
를 확장하여 시스템이 QR 코드 추적을 지원하는지 검사할 수 있습니다.
런타임은 supportsQrCodeTracking
이 XR_FALSE
인 경우에만 QR 코드 추적기 생성에 XR_ERROR_FEATURE_UNSUPPORTED
를 반환해야 합니다.
런타임이 QR 코드 추적을 지원하는 경우 언제든지 추적된 QR 코드 maxQrCodeCount
를 지원해야 합니다.
런타임이 QR 코드 크기 추정을 지원하는 경우 애플리케이션은 XrTrackableQrCodeConfigurationANDROID::qrCodeEdgeSize
0
를 설정하여 크기 추정 사용을 나타낼 수 있습니다.
그렇지 않으면 애플리케이션이 XrTrackableQrCodeConfigurationANDROID::qrCodeEdgeSize
을 양수 값으로 설정해야 합니다. 그렇지 않으면 XR_ERROR_VALIDATION_FAILURE
이 반환됩니다.
유효한 사용 (암시적)
XrSystemQrCodeTrackingPropertiesANDROID
를 사용하기 전에XR_ANDROID_trackables_qr_code
확장 프로그램을 사용 설정해야 합니다.type
은XR_TYPE_SYSTEM_QR_CODE_TRACKING_PROPERTIES_ANDROID
이어야 합니다.next
는NULL
이거나 구조체 체인의 다음 구조체를 가리키는 유효한 포인터여야 합니다.
QR 코드 추적
이 확장 프로그램은 XrTrackableTypeANDROID
에 XR_TRACKABLE_TYPE_QR_CODE_ANDROID
를 추가합니다.
애플리케이션은 xrCreateTrackableTrackerANDROID
를 호출하고 XrTrackableTrackerCreateInfoANDROID::trackableType
에서 추적 가능한 유형으로 XR_TRACKABLE_TYPE_QR_CODE_ANDROID
을 지정하여 XrTrackableTrackerANDROID
를 만들 수 있습니다(QR 코드 추적).
런타임은 XrTrackableTrackerCreateInfoANDROID::trackableType
가 XR_TRACKABLE_TYPE_QR_CODE_ANDROID
이고 XrSystemQrCodeTrackingPropertiesANDROID::supportsQrCodeTracking
이 xrGetSystemProperties
을 통해 XR_FALSE
를 반환하는 경우 XR_ERROR_FEATURE_UNSUPPORTED
를 반환해야 합니다.
XrTrackableQrCodeConfigurationANDROID
XrTrackableQrCodeConfigurationANDROID
구조는 다음과 같이 정의됩니다.
typedef struct XrTrackableQrCodeConfigurationANDROID {
XrStructureType type;
const void* next;
XrQrCodeTrackingModeANDROID trackingMode;
float qrCodeEdgeSize;
} XrTrackableQrCodeConfigurationANDROID;
회원 설명
type
은 이 구조의XrStructureType
입니다.next
는NULL
이거나 구조체 체인의 다음 구조체에 대한 포인터입니다. 이러한 구조는 핵심 OpenXR이나 이 확장 프로그램에 정의되어 있지 않습니다.trackingMode
은 추적에 원하는 모드를 나타내는XrQrCodeTrackingModeANDROID
입니다.qrCodeEdgeSize
는 QR 코드 가장자리의 크기를 미터 단위로 나타냅니다. 0인 경우 QR 코드 크기가 온라인으로 추정됩니다.
애플리케이션은 다음 XrTrackableTrackerCreateInfoANDROID
체인에 XrTrackableQrCodeConfigurationANDROID
을 추가하여 유효한 구성을 설정해야 합니다.
그렇지 않으면 런타임은 XR_ERROR_VALIDATION_FAILURE
를 반환해야 합니다.
런타임이 QR 코드 크기 추정을 지원하는 경우 애플리케이션은 크기 추정 사용을 나타내기 위해 XrTrackableQrCodeConfigurationANDROID::qrCodeEdgeSize
을 0
로 설정할 수 있습니다.
그렇지 않으면 애플리케이션이 XrTrackableQrCodeConfigurationANDROID::qrCodeEdgeSize
을 양수 값으로 설정해야 합니다. 그렇지 않으면 XR_ERROR_VALIDATION_FAILURE
이 반환됩니다.
런타임은 trackingMode
및 qrCodeEdgeSize
와 일치하도록 xrGetAllTrackablesANDROID
의 출력을 필터링해야 합니다.
유효한 사용 (암시적)
XrTrackableQrCodeConfigurationANDROID
를 사용하기 전에XR_ANDROID_trackables_qr_code
확장 프로그램을 사용 설정해야 합니다.type
은XR_TYPE_TRACKABLE_QR_CODE_CONFIGURATION_ANDROID
이어야 합니다.next
는NULL
이거나 구조체 체인의 다음 구조체를 가리키는 유효한 포인터여야 합니다.trackingMode
은(는) 유효한XrQrCodeTrackingModeANDROID
값이어야 합니다.
XrQrCodeTrackingModeANDROID
XrQrCodeTrackingModeANDROID
열거형은 QR 코드의 지원되는 추적 모드를 설명합니다.
typedef enum XrQrCodeTrackingModeANDROID {
XR_QR_CODE_TRACKING_MODE_STATIC_ANDROID = 0,
XR_QR_CODE_TRACKING_MODE_DYNAMIC_ANDROID = 1,
XR_QR_CODE_TRACKING_MODE_MAX_ENUM_ANDROID = 0x7FFFFFFF
} XrQrCodeTrackingModeANDROID;
| 열거형 | 설명 XR_QR_CODE_TRACKING_MODE_STATIC_ANDROID
'
| XR_QR_CODE_TRACKING_MODE_DYNAMIC_ANDROID
| QR 코드는 동적이며 이동할 수 있습니다. |
QR 코드 가져오기
xrGetTrackableQrCodeANDROID
xrGetTrackableQrCodeANDROID
함수는 다음과 같이 정의됩니다.
XrResult xrGetTrackableQrCodeANDROID(
XrTrackableTrackerANDROID tracker,
const XrTrackableGetInfoANDROID* getInfo,
XrTrackableQrCodeANDROID* qrCodeOutput);
매개변수 설명
tracker
는 쿼리할XrTrackableTrackerANDROID
입니다.getInfo
는 추적 가능한 QR 코드를 가져오는 데 사용되는 정보가 포함된XrTrackableGetInfoANDROID
입니다.qrCodeOutput
는 추적 가능한 QR 코드가 반환되는XrTrackableQrCodeANDROID
구조체에 대한 포인터입니다.
XrTrackableANDROID
의 추적 가능한 유형이 XR_TRACKABLE_TYPE_QR_CODE_ANDROID
이 아니거나 XrTrackableTrackerANDROID
의 추적 가능한 유형이 XR_TRACKABLE_TYPE_QR_CODE_ANDROID
이 아닌 경우 런타임은 XR_ERROR_MISMATCHING_TRACKABLE_TYPE_ANDROID
를 반환해야 합니다.
유효한 사용 (암시적)
xrGetTrackableQrCodeANDROID
을 호출하기 전에XR_ANDROID_trackables_qr_code
확장 프로그램을 사용 설정해야 합니다.tracker
은 유효한XrTrackableTrackerANDROID
핸들이어야 합니다.getInfo
은 유효한XrTrackableGetInfoANDROID
구조체에 대한 포인터여야 합니다.qrCodeOutput
은XrTrackableQrCodeANDROID
구조체에 대한 포인터여야 합니다.
XrTrackableQrCodeANDROID
XrTrackableQrCodeANDROID
구조는 다음과 같이 정의됩니다.
typedef struct XrTrackableQrCodeANDROID {
XrStructureType type;
void* next;
XrTrackingStateANDROID trackingState;
XrTime lastUpdatedTime;
XrPosef centerPose;
XrExtent2Df extents;
uint32_t bufferCapacityInput;
uint32_t bufferCountOutput;
char* buffer;
} XrTrackableQrCodeANDROID;
회원 설명
type
은 이 구조의XrStructureType
입니다.next
는NULL
이거나 구조체 체인의 다음 구조체에 대한 포인터입니다. 이러한 구조는 핵심 OpenXR이나 이 확장 프로그램에 정의되어 있지 않습니다.trackingState
는 QR 코드의XrTrackingStateANDROID
입니다.lastUpdatedTime
은 QR 코드의 마지막 업데이트의XrTime
입니다.centerPose
는XrTrackableGetInfoANDROID::baseSpace
에 있는 QR 코드의XrPosef
입니다. QR 코드는 XZ 평면에 있으며 X는 QR 코드의 오른쪽을 가리키고 Z는 하단을 가리킵니다.extents
는 QR 코드의XrExtent2Df
크기입니다. 경계 상자의 경계는centerPose
+/- (extents
/ 2) 지점에 있습니다.bufferCapacityInput
은buffer
의 기능이거나 필요한 기능을 가져오는0
입니다.bufferCountOutput
bufferCapacityInput
이0
이면 런타임이 필요한 버퍼 크기를bufferCountOutput
에 씁니다. 그렇지 않으면buffer
에 기록된 총 요소가 포함됩니다.buffer
는 디코딩된 QR 코드 데이터를 쓸char
배열의 포인터입니다. 애플리케이션은nullptr
를 전달하여 필요한 버퍼 크기를 확인하거나 디코드 QR 코드 데이터를 요청하지 않는 경우를 확인할 수 있습니다. QR 코드 데이터는 null로 종료된 UTF-8 문자열로 반환됩니다.- 필요한
buffer
크기를 가져오는 방법에 관한 자세한 설명은 버퍼 크기 매개변수 섹션을 참고하세요.
유효한 사용 (암시적)
XrTrackableQrCodeANDROID
를 사용하기 전에XR_ANDROID_trackables_qr_code
확장 프로그램을 사용 설정해야 합니다.type
은XR_TYPE_TRACKABLE_QR_CODE_ANDROID
이어야 합니다.next
는NULL
이거나 구조체 체인의 다음 구조체를 가리키는 유효한 포인터여야 합니다.trackingState
은(는) 유효한XrTrackingStateANDROID
값이어야 합니다.bufferCapacityInput
이0
이 아닌 경우buffer
은bufferCapacityInput
char 값의 배열에 대한 포인터여야 합니다.
추적 가능한 QR 코드를 가져오는 코드 예시
다음 예제 코드는 추적 가능한 QR 코드를 가져오는 방법을 보여줍니다.
XrInstance instance; // previously initialized
XrSystemId systemId; // previously initialized
XrSession session; // previously initialized
// The function pointers are previously initialized using xrGetInstanceProcAddr.
PFN_xrGetSystemProperties xrGetSystemProperties; // previously initialized
PFN_xrCreateTrackableTrackerANDROID xrCreateTrackableTrackerANDROID; // previously initialized
PFN_xrGetAllTrackablesANDROID xrGetAllTrackablesANDROID; // previously initialized
PFN_xrGetTrackableQrCodeANDROID xrGetTrackableQrCodeANDROID; // 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.
// Inspect system capability
XrSystemQrCodeTrackingPropertiesANDROID qrCodeProperty =
{.type = XR_TYPE_SYSTEM_QR_CODE_TRACKING_PROPERTIES_ANDROID, .next = nullptr};
XrSystemProperties systemProperties = {.type = XR_TYPE_SYSTEM_PROPERTIES,
.next = &qrCodeProperty};
CHK_XR(xrGetSystemProperties(instance, systemId, &systemProperties));
if (!qrCodeProperty.supportsQrCodeTracking) {
// QR Code tracking is not supported.
return;
}
// Create a trackable tracker for QR Code tracking.
// If the runtime does not support size estimation, configures QR Code edge size of 0.1m.
XrTrackableQrCodeConfigurationANDROID configuration =
{.type = XR_TYPE_TRACKABLE_QR_CODE_CONFIGURATION_ANDROID,
.next = nullptr,
.trackingMode = XR_QR_CODE_TRACKING_MODE_DYNAMIC_ANDROID,
.qrCodeEdgeSize = qrCodeProperty.supportsQrCodeSizeEstimation ? 0.0f : 0.1f};
XrTrackableTrackerCreateInfoANDROID createInfo =
{.type = XR_TYPE_TRACKABLE_TRACKER_CREATE_INFO_ANDROID,
.next = &configuration,
.trackableType = XR_TRACKABLE_TYPE_QR_CODE_ANDROID};
XrTrackableTrackerANDROID qrCodeTracker;
auto res = xrCreateTrackableTrackerANDROID(session, &createInfo, &qrCodeTracker);
if (res == XR_ERROR_PERMISSION_INSUFFICIENT) {
// Handle permission requests.
}
CHK_XR(res);
// Get QR Codes.
std::vector<XrTrackableANDROID> trackables(qrCodeProperty.maxQrCodeCount);
std::vector<XrTrackableQrCodeANDROID> qrCodes(qrCodeProperty.maxQrCodeCount);
uint32_t qrCodeSize = 0;
CHK_XR(xrGetAllTrackablesANDROID(qrCodeTracker, qrCodeProperty.maxQrCodeCount, &qrCodeSize,
trackables.data()));
for (int i = 0; i < qrCodeSize; i++) {
qrCodes[i].type = XR_TYPE_TRACKABLE_QR_CODE_ANDROID;
qrCodes[i].next = nullptr;
qrCodes[i].bufferCountOutput = 0;
XrTrackableGetInfoANDROID getInfo = {.type = XR_TYPE_TRACKABLE_GET_INFO_ANDROID,
.next = nullptr,
.trackable = trackables.at(i),
.baseSpace = appSpace,
.time = updateTime};
CHK_XR(xrGetTrackableQrCodeANDROID(qrCodeTracker, &getInfo, &qrCodes[i]));
if (qrCodes[i].bufferCountOutput > 0) {
// Allocate the buffer if it is not already allocated.
if (qrCodes[i].bufferCapacityInput == 0) {
qrCodes[i].buffer = new char[qrCodes[i].bufferCountOutput];
qrCodes[i].bufferCapacityInput = qrCodes[i].bufferCountOutput;
CHK_XR(xrGetTrackableQrCodeANDROID(qrCodeTracker, &getInfo, &qrCodes[i]));
}
}
}
// Release trackable tracker.
CHK_XR(xrDestroyTrackableTrackerANDROID(qrCodeTracker));
새 열거형 상수
XrStructureType
열거형이 다음으로 확장됩니다.
XR_TYPE_SYSTEM_QR_CODE_TRACKING_PROPERTIES_ANDROID
XR_TYPE_TRACKABLE_QR_CODE_CONFIGURATION_ANDROID
XR_TYPE_TRACKABLE_QR_CODE_ANDROID
XrTrackableTypeANDROID
열거형이 다음으로 확장됩니다.
XR_TRACKABLE_TYPE_QR_CODE_ANDROID
새 열거형
XrQrCodeTrackingModeANDROID
새 구조
XrSystemQrCodeTrackingPropertiesANDROID
XrTrackableQrCodeConfigurationANDROID
XrTrackableQrCodeANDROID
새 함수
xrGetTrackableQrCodeANDROID
문제
버전 기록
- 버전 1, 2025-02-05 (레바나 첸)
- 초기 확장 프로그램 설명입니다.
OpenXR™ 및 OpenXR 로고는 The Khronos Group Inc. 소유의 상표이며 중국, 유럽 연합, 일본, 영국에 상표로 등록되어 있습니다.