Строка имени
XR_ANDROID_trackables_object
Тип расширения
Расширение экземпляра
Зарегистрированный внутренний номер
467
Редакция
1
Зависимости расширений и версий
Дата последнего изменения
03.10.2024
IP-статус
Нет известных претензий на интеллектуальную собственность.
Авторы
Спенсер Куин, Google
Нихав Джайн, Google
Джон Пёрси, Google
Джаред Файндер, Google
Левана Чен, Google
Кенни Веркамер, Google
Обзор
Это расширение позволяет отслеживать физические объекты. Например, клавиатуры, мыши и другие объекты окружающей среды.
Отслеживать объекты
Это расширение добавляет XR_TRACKABLE_TYPE_OBJECT_ANDROID
к XrTrackableTypeANDROID .
Приложение может создать XrTrackableTrackerANDROID , вызвав xrCreateTrackableTrackerANDROID и указав XR_TRACKABLE_TYPE_OBJECT_ANDROID
в качестве отслеживаемого типа в XrTrackableTrackerCreateInfoANDROID::trackableType для отслеживания объектов.
Получить отслеживаемый объект
Функция xrGetTrackableObjectANDROID определяется как:
XrResult xrGetTrackableObjectANDROID(
XrTrackableTrackerANDROID tracker,
const XrTrackableGetInfoANDROID* getInfo,
XrTrackableObjectANDROID* objectOutput);
Описание параметров
-
tracker
— это XrTrackableTrackerANDROID для запроса.-
getInfo
— это XrTrackableGetInfoANDROID , содержащий информацию, используемую для получения отслеживаемого объекта. -
objectOutput
— это указатель на структуру XrTrackableObjectANDROID , в которой возвращается отслеживаемый объект.
-
XR_ERROR_MISMATCHING_TRACKABLE_TYPE_ANDROID
будет возвращен, если отслеживаемый тип XrTrackableANDROID
не XR_TRACKABLE_TYPE_OBJECT_ANDROID
или если отслеживаемый тип XrTrackableTrackerANDROID не XR_TRACKABLE_TYPE_OBJECT_ANDROID
.
Допустимое использование (неявное)
- Расширение
XR_ANDROID_trackables_object
должно быть включено до вызова xrGetTrackableObjectANDROID.-
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
— это XrPosef объекта, расположенного в XrTrackableGetInfoANDROID::baseSpace . -
extents
— это размерность объекта XrExtent3DfEXT . -
objectLabel
— это XrObjectLabelANDROID , определенный средой выполнения для этого объекта. -
lastUpdatedTime
— этоXrTime
последнего обновления объекта.
-
Допустимое использование (неявное)
- Расширение
XR_ANDROID_trackables_object
должно быть включено перед использованием XrTrackableObjectANDROID.-
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);
Новые константы перечисления
Перечисление XrStructureType расширено:
-
XR_TYPE_TRACKABLE_OBJECT_ANDROID
-
XR_TYPE_TRACKABLE_OBJECT_CONFIGURATION_ANDROID
Перечисление XrTrackableTypeANDROID расширено:
-
XR_TRACKABLE_TYPE_OBJECT_ANDROID
Новые перечисления
Новые структуры
Новые функции
Проблемы
История версий
- Редакция 1, 3 октября 2024 г. (Кенни Веркамер)
- Первоначальное описание расширения.