Cadena de nombre
XR_ANDROID_trackables_object
Tipo de extensión
Extensión de la instancia
Número de extensión registrado
467
Revisión
1
Dependencias de extensiones y versiones
Fecha de última modificación
2024-10-03
Estado de la IP
No hay reclamos de IP conocidos.
Colaboradores
Spencer Quin, Google
Nihav Jain, Google
John Pursey, Google
Jared Finder, Google
Levana Chen, Google
Kenny Vercaemer, Google
Descripción general
Esta extensión habilita el seguimiento de objetos físicos. Por ejemplo, teclados, ratones y otros objetos del entorno.
Hacer un seguimiento de los objetos
Esta extensión agrega XR_TRACKABLE_TYPE_OBJECT_ANDROID
a XrTrackableTypeANDROID.
La aplicación puede crear un XrTrackableTrackerANDROID llamando a xrCreateTrackableTrackerANDROID y especificando XR_TRACKABLE_TYPE_OBJECT_ANDROID
como el tipo rastreable en XrTrackableTrackerCreateInfoANDROID::trackableType para hacer un seguimiento de los objetos.
Cómo obtener un objeto rastreable
La función xrGetTrackableObjectANDROID se define de la siguiente manera:
XrResult xrGetTrackableObjectANDROID(
XrTrackableTrackerANDROID tracker,
const XrTrackableGetInfoANDROID* getInfo,
XrTrackableObjectANDROID* objectOutput);
Descripciones de los parámetros
tracker
es el XrTrackableTrackerANDROID que se consulta.getInfo
es XrTrackableGetInfoANDROID con la información que se usa para obtener el objeto rastreable.objectOutput
es un puntero a la estructura XrTrackableObjectANDROID en la que se muestra el objeto rastreable.
Se mostrará XR_ERROR_MISMATCHING_TRACKABLE_TYPE_ANDROID
si el tipo rastreable de XrTrackableANDROID
no es XR_TRACKABLE_TYPE_OBJECT_ANDROID
o si el tipo rastreable de XrTrackableTrackerANDROID no es XR_TRACKABLE_TYPE_OBJECT_ANDROID
.
Uso válido (implícito)
- La extensión
XR_ANDROID_trackables_object
debe estar habilitada antes de llamar a xrGetTrackableObjectANDROID.tracker
debe ser un controlador XrTrackableTrackerANDROID válido.getInfo
debe ser un puntero a una estructura XrTrackableGetInfoANDROID válida.objectOutput
debe ser un puntero a una estructura XrTrackableObjectANDROID.
Códigos de retorno
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
La estructura XrTrackableObjectANDROID se define de la siguiente manera:
typedef struct XrTrackableObjectANDROID {
XrStructureType type;
void* next;
XrTrackingStateANDROID trackingState;
XrPosef centerPose;
XrExtent3DfEXT extents;
XrObjectLabelANDROID objectLabel;
XrTime lastUpdatedTime;
} XrTrackableObjectANDROID;
Descripciones de los miembros
type
es el XrStructureType de esta estructura.next
esNULL
o un puntero a la siguiente estructura en una cadena de estructuras. No se definen tales estructuras en OpenXR principal ni en esta extensión.trackingState
es el XrTrackingStateANDROID del objeto.centerPose
es el XrPosef del objeto ubicado en XrTrackableGetInfoANDROID::baseSpace.extents
es la dimensión XrExtent3DfEXT del objeto.objectLabel
es el XrObjectLabelANDROID que el entorno de ejecución determinó para este objeto.lastUpdatedTime
es elXrTime
de la última actualización del objeto.
Uso válido (implícito)
- La extensión
XR_ANDROID_trackables_object
debe estar habilitada antes de usar XrTrackableObjectANDROID.type
debe serXR_TYPE_TRACKABLE_OBJECT_ANDROID
.next
debe serNULL
o un puntero válido a la siguiente estructura en una cadena de estructuras.trackingState
debe ser un valor válido de XrTrackingStateANDROID.objectLabel
debe ser un valor válido de XrObjectLabelANDROID.
La enumeración XrObjectLabelANDROID es una etiqueta para un objeto 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;
Código de ejemplo para obtener objetos rastreables
En el siguiente ejemplo de código, se muestra cómo obtener objetos rastreables.
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);
Nuevas constantes de enum
La enumeración XrStructureType se extiende con lo siguiente:
XR_TYPE_TRACKABLE_OBJECT_ANDROID
XR_TYPE_TRACKABLE_OBJECT_CONFIGURATION_ANDROID
La enumeración XrTrackableTypeANDROID se extiende con lo siguiente:
XR_TRACKABLE_TYPE_OBJECT_ANDROID
Enumeraciones nuevas
Nuevas estructuras
Funciones nuevas
Problemas
Historial de versiones
- Revisión 1, 03/10/2024 (Kenny Vercaemer)
- Descripción inicial de la extensión.