XRInterface
Базовый класс для реализации интерфейса XR.
Базовый класс для реализации интерфейса XR.
Этот класс должен быть внедрен для обеспечения доступа Reckfell к AR или VR-платформе, и они должны быть реализованы в качестве модулей C++ или ReckfellExtension Часть интерфейса подвергается воздействию C#, так что вы можете обнаружить, открыть и настроить платформу AR или VR.
Интерфейсы должны быть написаны таким образом, чтобы просто дать им возможность дать нам рабочую схему. Вы можете получить доступные интерфейсы через XRServer.
Объявления сверены с C# SDK 1.0.0. Раскройте имя, чтобы увидеть сигнатуры и описание.
Свойства4
ArIsAnchorDetectionEnabledСвойство
public bool ArIsAnchorDetectionEnabled { get; set; }В интерфейсе дополненной реальности, если true включено обнаружение привязки.
EnvironmentBlendModeСвойство
public XRInterface.EnvironmentBlendModeEnum EnvironmentBlendMode { get; set; }Запрошенный режим композиции интерфейса. Базовый getter возвращает Opaque; OpenXR может эмулировать AlphaBlend при другом внутреннем режиме. Setter свойства не сообщает об отказе: для обработки результата используйте SetEnvironmentBlendMode. Это не флаг готовности видеокамер и не настройка TransparentBg.
InterfaceIsPrimaryСвойство
public bool InterfaceIsPrimary { get; set; }true , если это основной интерфейс.
XRPlayAreaModeСвойство
public XRInterface.PlayAreaMode XRPlayAreaMode { get; set; }Режим игровой зоны для этого интерфейса.
Методы30
GetAnchorDetectionIsEnabledbool
public bool GetAnchorDetectionIsEnabled();boolGetCameraFeedIdint
public int GetCameraFeedId();Если это интерфейс дополненной реальности, требующий отображения потока камеры в качестве фона, этот метод возвращает идентификатор потока в CameraServer для этого интерфейса.
intGetCameraOffsetsReckfell.Collections.Array<Transform3D>
public Reckfell.Collections.Array<Transform3D> GetCameraOffsets(StringName trackerName);Получает набор перестановок для каждого просмотра для трекера tracker_name. tracker_name должен иметь в виду XRPositionalTracker Верните пустой массив, если этот интерфейс не отвечает за этот трекер.
| Имя | Тип | По умолчанию |
|---|---|---|
trackerName | StringName | — |
Reckfell.Collections.Array<Transform3D>GetCameraProjectionsReckfell.Collections.Array<Projection>
public Reckfell.Collections.Array<Projection> GetCameraProjections(StringName trackerName, double aspect, double near, double far);Получает набор матриц проекций для каждого вида для трекера tracker_name. tracker_name должен иметь в виду XRPositionalTracker Верните пустой массив, если этот интерфейс не отвечает за этот трекер.
| Имя | Тип | По умолчанию |
|---|---|---|
trackerName | StringName | — |
aspect | double | — |
near | double | — |
far | double | — |
Reckfell.Collections.Array<Projection>GetCapabilitiesuint
public uint GetCapabilities();Возвращает комбинацию флагов XRInterface.Capabilities, предоставляющих информацию о возможностях этого интерфейса.
uintGetEnvironmentBlendModeXRInterface.EnvironmentBlendModeEnum
public XRInterface.EnvironmentBlendModeEnum GetEnvironmentBlendMode();Возвращает режим, сообщаемый реализацией; в OpenXR — requested mode, в базовом интерфейсе — Opaque. Не подтверждает активную сессию, фокус, получение видео или согласие пользователя. Для alpha отдельно настройте прозрачный фон Viewport.
XRInterface.EnvironmentBlendModeEnumРежим, сообщаемый интерфейсом; не гарантия фактического видеопотока.
GetNameStringName
public StringName GetName();Возвращает имя этого интерфейса ("OpenXR", "OpenVR", "OpenHMD", "ARKit" и т. д.).
StringNameGetPlayAreaVector3[]
public Vector3[] GetPlayArea();Возвращает массив векторов, представляющих физическую игровую зону, сопоставленную с виртуальным пространством вокруг точки XROrigin3D. Точки образуют выпуклый многоугольник, который можно использовать для реагирования на игровую зону или ее визуализации. Это возвращает пустой массив, если эта функция не поддерживается или если информация еще недоступна.
Vector3[]GetPlayAreaModeXRInterface.PlayAreaMode
public XRInterface.PlayAreaMode GetPlayAreaMode();XRInterface.PlayAreaModeGetProjectionForViewProjection · Устарело
public Projection GetProjectionForView(uint view, double aspect, double near, double far);Возвращает матрицу проекции для вида/глаза.
| Имя | Тип | По умолчанию |
|---|---|---|
view | uint | — |
aspect | double | — |
near | double | — |
far | double | — |
ProjectionGetRenderTargetSizeVector2
public Vector2 GetRenderTargetSize();Возвращает разрешение, с которым следует визуализировать промежуточные результаты, прежде чем VR-платформа применит такие эффекты, как искажение объектива.
Vector2GetSupportedEnvironmentBlendModesReckfell.Collections.Array
public Reckfell.Collections.Array GetSupportedEnvironmentBlendModes();Возвращает новый контейнер значений EnvironmentBlendModeEnum. Базовая реализация содержит Opaque; OpenXR без внутреннего API возвращает пустой список, после запуска может добавлять эмулируемый AlphaBlend. Проверяйте наличие конкретного значения через Contains, не индекс как bool. Контейнер можно Dispose; интерфейс остаётся заимствованным.
Reckfell.Collections.ArrayНовый Array enum-значений; может быть пустым. Проверяйте membership нужного режима.
GetSystemInfoReckfell.Collections.Dictionary
public Reckfell.Collections.Dictionary GetSystemInfo();Возвращает Reckfell.Collections.Dictionary с дополнительной системной информацией. Интерфейсы должны возвращать XRRuntimeName и XRRuntimeVersion, предоставляя информацию об используемой среде выполнения XR. Дополнительные записи могут быть предоставлены для конкретного интерфейса.
**Примечание:**Эта информация может быть доступна только после успешного вызова XRInterface.Initialize.
Reckfell.Collections.DictionaryGetTrackingStatusXRInterface.TrackingStatus
public XRInterface.TrackingStatus GetTrackingStatus();Если поддерживается, возвращает статус нашего отслеживания. Это позволит вам предоставить пользователю обратную связь, если есть проблемы с позиционным отслеживанием.
XRInterface.TrackingStatusGetTransformForViewTransform3D · Устарело
public Transform3D GetTransformForView(uint view, Transform3D camTransform);Возвращает преобразование для вида/глаза.
view — индекс вида/глаза.
cam_transform — преобразование, которое сопоставляет координаты устройства с координатами сцены, обычно Entity3D.GlobalTransform текущего XROrigin3D.
| Имя | Тип | По умолчанию |
|---|---|---|
view | uint | — |
camTransform | Transform3D | — |
Transform3DGetViewCountuint
public uint GetViewCount();Возвращает количество видов, которые необходимо отобразить для этого устройства. 1 для Моноскопического, 2 для Стереоскопического.
uintInitializebool
public bool Initialize();Вызовите это, чтобы инициализировать этот интерфейс. Первый инициализированный интерфейс определяется как основной интерфейс, и он будет использоваться для рендеринга вывода. После инициализации интерфейса, который вы хотите использовать, вам необходимо включить режим AR/VR вьюпорта, и рендеринг должен начаться. Примечание: Вы должны включить режим XR на главном вьюпорте для любого устройства, которое использует основной вывод Reckfell, например, для мобильного VR. Если вы сделаете это для платформы, которая обрабатывает свой собственный вывод (например, OpenVR), Reckfell покажет только один глаз без искажений на экране. В качестве альтернативы вы можете добавить отдельный узел вьюпорта в свою сцену и включить AR/VR на этом вьюпорте. Он будет использоваться для вывода на HMD, что позволит вам делать все, что угодно в главном окне, например, использовать отдельную камеру в качестве камеры зрителя или рендерить что-то совершенно другое. Хотя в настоящее время это не используется, вы можете активировать дополнительные интерфейсы. Вы можете сделать это, если хотите отслеживать контроллеры с других платформ. Однако на данный момент только один интерфейс может осуществлять рендеринг на HMD.
boolIsInitializedbool
public bool IsInitialized();Возвращает true, если этот интерфейс был инициализирован.
boolIsPassthroughEnabledbool · Устарело
public bool IsPassthroughEnabled();Устаревший метод. Вместо него сравнивайте GetEnvironmentBlendMode() с AlphaBlend. В OpenXR он только сравнивает сообщаемый режим, не проверяет кадры камеры, session focus или разрешения; в базовом интерфейсе возвращает false.
boolLegacy-сравнение режима с AlphaBlend; не аппаратная проверка видео.
IsPassthroughSupportedbool · Устарело
public bool IsPassthroughSupported();Устаревший метод; используйте GetSupportedEnvironmentBlendModes и membership AlphaBlend. В текущем OpenXR есть дефект: find возвращает индекс, преобразуемый в bool; −1 даёт true, индекс 0 — false. Воспроизведён true при пустом списке без инициализации. Ошибка не исправлена; результат нельзя использовать как capability gate.
boolНенадёжный legacy bool в текущем OpenXR; пустой список ошибочно даёт true.
IsPrimarybool
public bool IsPrimary();boolSetAnchorDetectionIsEnabledvoid
public void SetAnchorDetectionIsEnabled(bool enable);| Имя | Тип | По умолчанию |
|---|---|---|
enable | bool | — |
SetEnvironmentBlendModebool
public bool SetEnvironmentBlendMode(XRInterface.EnvironmentBlendModeEnum mode);Запрашивает режим и возвращает результат setter реализации. Проверяйте список поддерживаемых режимов и bool; отдельно меняйте TransparentBg только после принятого запроса. OpenXR без API возвращает false, а перед завершением инициализации внутренний API может сохранить запрос для поздней проверки. Успех не подтверждает видео или фокус.
| Имя | Тип | По умолчанию |
|---|---|---|
mode | XRInterface.EnvironmentBlendModeEnum | — |
modeЗапрошенный Opaque, Additive или AlphaBlend из списка поддерживаемых режимов; не индекс списка.
boolПринят ли запрос реализацией; не проверка прозрачности Viewport или качества passthrough.
SetPlayAreaModebool
public bool SetPlayAreaMode(XRInterface.PlayAreaMode mode);Устанавливает режим активной игровой зоны, вернет false, если режим не может быть использован с этим интерфейсом.
Примечание: Изменение этого после того, как интерфейс уже инициализирован, может быть неприятным для игрока, поэтому рекомендуется выполнить центрирование на HMD с помощью XRServer.CenterOnHmd (при переключении на XRInterface.PlayAreaMode.Stage) или выполнить переключение во время смены сцены.
| Имя | Тип | По умолчанию |
|---|---|---|
mode | XRInterface.PlayAreaMode | — |
boolSetPrimaryvoid
public void SetPrimary(bool primary);| Имя | Тип | По умолчанию |
|---|---|---|
primary | bool | — |
StartPassthroughbool · Устарело
public bool StartPassthrough();Устаревший метод. В OpenXR просто вызывает SetEnvironmentBlendMode(AlphaBlend); базовая реализация возвращает false. Не включает прозрачность Viewport и не инициализирует сессию. Для нового кода явно проверяйте список режимов и результат SetEnvironmentBlendMode.
boolLegacy-результат запроса AlphaBlend; не результат настройки сцены.
StopPassthroughvoid · Устарело
public void StopPassthrough();Устаревший метод. OpenXR запрашивает Opaque без возвращаемого результата; базовая реализация ничего не делает. Не восстанавливает прежний blend mode или TransparentBg. Сохраните состояние и выполните явное обратное переключение с проверкой bool.
SupportsPlayAreaModebool
public bool SupportsPlayAreaMode(XRInterface.PlayAreaMode mode);Вызовите этот метод, чтобы узнать, поддерживается ли данный режим игровой зоны данным интерфейсом.
| Имя | Тип | По умолчанию |
|---|---|---|
mode | XRInterface.PlayAreaMode | — |
boolTriggerHapticPulsevoid
public void TriggerHapticPulse(string actionName, StringName trackerName, double frequency, double amplitude, double durationSec, double delaySec);Выключает хаптический импульс на устройстве, связанном с этим интерфейсом.
action_name - название действия для этого импульса.
tracker_name является факультативным и может использоваться для направления импульса на конкретное устройство при условии, что это устройство связано с этим хаптическим устройством.
frequency - частота импульса, установленная на 0.0 для использования системы по умолчанию.
amplitude - амплитуда импульса между 0.0 и 1.0.
duration_sec - продолжительность импульса в секундах.
delay_sec - задержка в секундах перед подачей импульса.
| Имя | Тип | По умолчанию |
|---|---|---|
actionName | string | — |
trackerName | StringName | — |
frequency | double | — |
amplitude | double | — |
durationSec | double | — |
delaySec | double | — |
Uninitializevoid
public void Uninitialize();Отключает интерфейс.
Сигналы и события1
PlayAreaChangedСобытие
public event XRInterface.PlayAreaChangedEventHandler PlayAreaChanged;Выдается при изменении игровой зоны. Это может быть результатом сброса игроком границы или входа в новую игровую зону, смены игроком режима игровой зоны, изменения масштаба мира или сброса игроком ориентации гарнитуры.
| Имя | Тип | По умолчанию |
|---|---|---|
mode | long | — |
XRInterface.Capabilities
| Значение | Описание |
|---|---|
Ar = 16 | Этот интерфейс поддерживает дополненную реальность (AR) (видеофон и отслеживание в реальном мире). |
External = 32 | Этот интерфейс выводит данные на внешнее устройство. Если используется основная область просмотра, вывод на экране представляет собой неизмененный буфер левого или правого глаза (растянутый, если размер области просмотра не изменен до того же соотношения сторон, что и |
Mono = 1 | Этот интерфейс может работать с обычным выводом рендеринга (дополненная реальность, не основанная на HMD). |
None = 0 | Отсутствуют возможности XR. |
Quad = 4 | Этот интерфейс поддерживает квадро-рендеринг (пока не поддерживается Reckfell). |
Stereo = 2 | Этот интерфейс поддерживает стереоскопическую визуализацию. |
Vr = 8 | Этот интерфейс поддерживает VR. |
XRInterface.EnvironmentBlendModeEnum
| Значение | Описание |
|---|---|
Additive = 1 | Режим аддитивного смешивания. Обычно используется для устройств дополненной реальности или устройств виртуальной реальности с возможностью сквозного пропускания. |
AlphaBlend = 2 | Режим альфа-смешивания. Обычно используется для устройств дополненной или виртуальной реальности с возможностями сквозного пропускания. Альфа-канал управляет видимостью сквозного пропускания. Альфа 0,0 означает, что сквозное пропускание видимо, и этот пиксель работает в режиме АДДИТИВНОГО ПРОСТРАНСТВА. Альфа 1,0 означает, что сквозное пропускание невидимо, и этот пиксель работает в режиме НЕПРОЗРАЧНОГО ПРОСТРАНСТВА. |
Opaque = 0 | Режим наложения Opaque. Обычно используется для устройств виртуальной реальности. |
XRInterface.PlayAreaMode
| Значение | Описание |
|---|---|
Area3Dof = 1 | Игровая зона поддерживает только отслеживание ориентации, отслеживание положения не поддерживается, зона будет центрирована вокруг игрока. |
Custom = 2147483647 | Пользовательская игровая зона, заданная с помощью ReckfellExtension. |
Roomscale = 3 | Игрок может свободно перемещаться, полное отслеживание положения. |
Sitting = 2 | Игрок находится в сидячем положении, отслеживание положения ограничено, вокруг игрока зафиксирован охранник. |
Stage = 4 | То же, что и |
Unknown = 0 | Режим игровой зоны не установлен или недоступен. |
XRInterface.TrackingStatus
| Значение | Описание |
|---|---|
ExcessiveMotion = 1 | Отслеживание затруднено из-за чрезмерного движения (игрок движется быстрее, чем отслеживание может за ним уследить). |
InsufficientFeatures = 2 | Отслеживание затруднено из-за недостатка функций, слишком темно (для отслеживания с помощью камеры), игрок заблокирован и т. д. |
NormalTracking = 0 | Отслеживание работает так, как и ожидалось. |
NotTracking = 4 | Отслеживание не работает (камера не подключена или закрыта, маяки выключены, петушок улетел и т. д.). |
UnknownTracking = 3 | Мы не знаем статус отслеживания, или этот интерфейс не обеспечивает обратную связь. |
XRInterface.VrsTextureFormat
| Значение | Описание |
|---|---|
FragmentDensityMap = 2 | Формат текстуры такой же, как и ожидается от расширения Vulkan |
FragmentShadingRate = 1 | Формат текстуры такой же, как и ожидается от расширения Vulkan |
RasterizationRateMap = 3 | Текстура содержит металл |
Unified = 0 | Формат текстуры такой же, как и возвращаемый |