String de nome
XR_ANDROID_trackables_qr_code
Tipo de extensão
Extensão da instância
Número de ramal registrado
460
Revisão
1
Dependências de extensão e versão
Data da última modificação
2025-02-05
Status do IP
Não há reivindicações de IP conhecidas.
Colaboradores
Christopher Doer, Google
Levana Chen, Google
Jared Finder, Google
Spencer Quin, Google
Nihav Jain, Google
Diego Tipaldi, Google
Ken Mackay, Google
Daniel Guttenberg, Qualcomm
Visão geral
Essa extensão permite o rastreamento físico e a decodificação de dados de QR code.
Inspecionar a capacidade do sistema
XrSystemQrCodeTrackingPropertiesANDROID
A estrutura XrSystemQrCodeTrackingPropertiesANDROID é definida como:
typedef struct XrSystemQrCodeTrackingPropertiesANDROID {
XrStructureType type;
void* next;
XrBool32 supportsQrCodeTracking;
XrBool32 supportsQrCodeSizeEstimation;
uint32_t maxQrCodeCount;
} XrSystemQrCodeTrackingPropertiesANDROID;
Descrições de membros
typeé oXrStructureTypedessa estrutura.nextéNULLou um ponteiro para a próxima estrutura em uma cadeia de estruturas. Nenhuma dessas estruturas é definida no OpenXR principal ou nesta extensão.supportsQrCodeTrackingé umXrBool32que indica se o sistema atual oferece a capacidade de rastreamento de QR code.supportsQrCodeSizeEstimationé umXrBool32que indica se o sistema atual oferece estimativa de tamanho do QR code.maxQrCodeCounté o número máximo total de QR Codes que podem ser rastreados ao mesmo tempo.
Um aplicativo pode inspecionar se o sistema é capaz de rastrear códigos QR estendendo o XrSystemProperties com a estrutura XrSystemQrCodeTrackingPropertiesANDROID ao chamar xrGetSystemProperties.
O tempo de execução precisa retornar XR_ERROR_FEATURE_UNSUPPORTED para a criação de rastreadores de QR code se e somente se supportsQrCodeTracking for XR_FALSE.
Se um ambiente de execução for compatível com o rastreamento de QR codes, ele precisa ser compatível com maxQrCodeCount QR codes rastreados a qualquer momento.
Se um ambiente de execução for compatível com a estimativa de tamanho do QR code, o aplicativo poderá definir
XrTrackableQrCodeConfigurationANDROID::qrCodeEdgeSize 0 para
indicar o uso da estimativa de tamanho.
Caso contrário, o aplicativo precisa definir XrTrackableQrCodeConfigurationANDROID::qrCodeEdgeSize como um valor positivo ou XR_ERROR_VALIDATION_FAILURE será retornado.
Uso válido (implícito)
- A extensão
XR_ANDROID_trackables_qr_codeprecisa ser ativada antes de usarXrSystemQrCodeTrackingPropertiesANDROID typeprecisa serXR_TYPE_SYSTEM_QR_CODE_TRACKING_PROPERTIES_ANDROIDnextprecisa serNULLou um ponteiro válido para a próxima estrutura em uma cadeia de estruturas.
Rastreamento de QR codes
Essa extensão adiciona XR_TRACKABLE_TYPE_QR_CODE_ANDROID a
XrTrackableTypeANDROID.
O aplicativo pode criar um XrTrackableTrackerANDROID chamando
xrCreateTrackableTrackerANDROID e especificando
XR_TRACKABLE_TYPE_QR_CODE_ANDROID como o tipo rastreável em
XrTrackableTrackerCreateInfoANDROID::trackableType para rastrear códigos
QR.
O tempo de execução precisa retornar XR_ERROR_FEATURE_UNSUPPORTED se XrTrackableTrackerCreateInfoANDROID::trackableType for XR_TRACKABLE_TYPE_QR_CODE_ANDROID e XrSystemQrCodeTrackingPropertiesANDROID::supportsQrCodeTracking retornar XR_FALSE via xrGetSystemProperties.
XrTrackableQrCodeConfigurationANDROID
A estrutura XrTrackableQrCodeConfigurationANDROID é definida como:
typedef struct XrTrackableQrCodeConfigurationANDROID {
XrStructureType type;
const void* next;
XrQrCodeTrackingModeANDROID trackingMode;
float qrCodeEdgeSize;
} XrTrackableQrCodeConfigurationANDROID;
Descrições de membros
typeé oXrStructureTypedessa estrutura.nextéNULLou um ponteiro para a próxima estrutura em uma cadeia de estruturas. Nenhuma dessas estruturas é definida no OpenXR principal ou nesta extensão.trackingModeé umXrQrCodeTrackingModeANDROIDque indica o modo de acompanhamento desejado.qrCodeEdgeSizeindica o tamanho da borda do QR code em metros. Se for zero, o tamanho do QR code será estimado on-line.
O aplicativo precisa definir uma configuração válida adicionando um
XrTrackableQrCodeConfigurationANDROID à próxima cadeia de
XrTrackableTrackerCreateInfoANDROID.
Caso contrário, o tempo de execução precisa retornar XR_ERROR_VALIDATION_FAILURE.
Se o ambiente de execução for compatível com a estimativa de tamanho do QR code, o aplicativo poderá definir XrTrackableQrCodeConfigurationANDROID::qrCodeEdgeSize como 0 para indicar o uso da estimativa de tamanho.
Caso contrário, o aplicativo precisa definir XrTrackableQrCodeConfigurationANDROID::qrCodeEdgeSize como um valor positivo ou XR_ERROR_VALIDATION_FAILURE será retornado.
O tempo de execução precisa filtrar a saída de xrGetAllTrackablesANDROID para corresponder a trackingMode e qrCodeEdgeSize.
Uso válido (implícito)
- A extensão
XR_ANDROID_trackables_qr_codeprecisa ser ativada antes de usarXrTrackableQrCodeConfigurationANDROID typeprecisa serXR_TYPE_TRACKABLE_QR_CODE_CONFIGURATION_ANDROIDnextprecisa serNULLou um ponteiro válido para a próxima estrutura em uma cadeia de estruturas.trackingModeprecisa ser um valorXrQrCodeTrackingModeANDROIDválido
XrQrCodeTrackingModeANDROID
O enum XrQrCodeTrackingModeANDROID descreve os modos de rastreamento compatíveis de QR codes.
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;
| Enum | Description XR_QR_CODE_TRACKING_MODE_STATIC_ANDROID '
| XR_QR_CODE_TRACKING_MODE_DYNAMIC_ANDROID | O QR code é dinâmico e pode se mover. |
Ver QR codes
xrGetTrackableQrCodeANDROID
A função xrGetTrackableQrCodeANDROID é definida como:
XrResult xrGetTrackableQrCodeANDROID(
XrTrackableTrackerANDROID tracker,
const XrTrackableGetInfoANDROID* getInfo,
XrTrackableQrCodeANDROID* qrCodeOutput);
Descrições dos parâmetros
trackeré oXrTrackableTrackerANDROIDa ser consultado.getInfoé oXrTrackableGetInfoANDROIDcom as informações usadas para gerar o QR code rastreável.qrCodeOutputé um ponteiro para a estruturaXrTrackableQrCodeANDROIDem que o QR code rastreável é retornado.
O tempo de execução precisa retornar XR_ERROR_MISMATCHING_TRACKABLE_TYPE_ANDROID
se o tipo rastreável do XrTrackableANDROID não for
XR_TRACKABLE_TYPE_QR_CODE_ANDROID ou se o tipo rastreável do
XrTrackableTrackerANDROID não for
XR_TRACKABLE_TYPE_QR_CODE_ANDROID.
Uso válido (implícito)
- A extensão
XR_ANDROID_trackables_qr_codeprecisa ser ativada antes de chamarxrGetTrackableQrCodeANDROID. trackerprecisa ser um identificadorXrTrackableTrackerANDROIDválidogetInfoprecisa ser um ponteiro para uma estruturaXrTrackableGetInfoANDROIDválidaqrCodeOutputprecisa ser um ponteiro para uma estruturaXrTrackableQrCodeANDROID.
XrTrackableQrCodeANDROID
A estrutura XrTrackableQrCodeANDROID é definida como:
typedef struct XrTrackableQrCodeANDROID {
XrStructureType type;
void* next;
XrTrackingStateANDROID trackingState;
XrTime lastUpdatedTime;
XrPosef centerPose;
XrExtent2Df extents;
uint32_t bufferCapacityInput;
uint32_t bufferCountOutput;
char* buffer;
} XrTrackableQrCodeANDROID;
Descrições de membros
typeé oXrStructureTypedessa estrutura.nextéNULLou um ponteiro para a próxima estrutura em uma cadeia de estruturas. Nenhuma dessas estruturas é definida no OpenXR principal ou nesta extensão.trackingStateé oXrTrackingStateANDROIDdo QR code.lastUpdatedTimeé oXrTimeda última atualização do QR code.centerPoseé oXrPosefdo QR code localizado emXrTrackableGetInfoANDROID::baseSpace. O QR code fica no plano XZ, com X apontando para a direita do QR code e Z apontando para a parte de baixo.extentssão as dimensõesXrExtent2Dfdo QR code. O limite da caixa delimitadora está nos pontos:centerPose+/- (extents/ 2).bufferCapacityInputé a capacidade dobufferou0para recuperar a capacidade necessária.bufferCountOutputSe obufferCapacityInputfor0, o tempo de execução vai gravar o tamanho do buffer necessário embufferCountOutput. Caso contrário, ele vai conter o total de elementos gravados embuffer.bufferé um ponteiro para uma matriz decharpara gravar os dados decodificados do QR code. O aplicativo pode transmitir umnullptrpara determinar o tamanho do buffer necessário ou se não estiver solicitando os dados do QR code de decodificação. Os dados do QR code são retornados como uma string UTF-8 terminada em nulo.- Consulte a seção Parâmetros de tamanho do buffer para uma descrição detalhada de como recuperar o tamanho
buffernecessário.
Uso válido (implícito)
- A extensão
XR_ANDROID_trackables_qr_codeprecisa ser ativada antes de usarXrTrackableQrCodeANDROID typeprecisa serXR_TYPE_TRACKABLE_QR_CODE_ANDROIDnextprecisa serNULLou um ponteiro válido para a próxima estrutura em uma cadeia de estruturas.trackingStateprecisa ser um valorXrTrackingStateANDROIDválido- Se
bufferCapacityInputnão for0,bufferprecisa ser um ponteiro para uma matriz de valores charbufferCapacityInput.
Exemplo de código para receber QR codes rastreáveis
O exemplo de código a seguir demonstra como receber QR Codes rastreáveis.
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));
Novas constantes de enumeração
A enumeração XrStructureType é estendida com:
XR_TYPE_SYSTEM_QR_CODE_TRACKING_PROPERTIES_ANDROIDXR_TYPE_TRACKABLE_QR_CODE_CONFIGURATION_ANDROIDXR_TYPE_TRACKABLE_QR_CODE_ANDROID
A enumeração XrTrackableTypeANDROID é estendida com:
XR_TRACKABLE_TYPE_QR_CODE_ANDROID
Novos enums
XrQrCodeTrackingModeANDROID
Novas estruturas
XrSystemQrCodeTrackingPropertiesANDROIDXrTrackableQrCodeConfigurationANDROIDXrTrackableQrCodeANDROID
Novas funções
xrGetTrackableQrCodeANDROID
Problemas
Histórico de versões
- Revisão 1, 05/02/2025 (Levana Chen)
- Descrição inicial da extensão.
OpenXR™ e o logotipo OpenXR são marcas registradas de propriedade da Khronos Group Inc. e estão registradas como marcas comerciais na China, na União Europeia, no Japão e no Reino Unido.