Spec-Zone.ru › Web APIs

XRReferenceSpace: событие reset

Ограниченная доступность

Эта функция не относится к Baseline, так как она не работает во всех популярных браузерах.

  • Узнать больше
  • Полная совместимость
  • Отправить отзыв

Безопасный контекст: Эта функция доступна только в безопасных контекстах (HTTPS) в некоторых или во всех поддерживающих браузерах.

Событие reset отправляется объекту XRReferenceSpace, когда обнаруживается разрыв в родном происхождении или эффективном происхождении, что приводит к изменению положения или ориентации объектов, ориентированных с помощью пространства отсчёта. Это часто происходит, когда пользователь калибрует или перекалибрует устройство XR, или если устройство автоматически меняет своё происхождение после потери отслеживания пользователя, а затем снова его находит.

В случае объектов XRBoundedReferenceSpace событие reset также может быть вызвано при изменении boundsGeometry.

В любом случае, событие отправляется до выполнения любых кадров анимации WebXR, которые используют новое происхождение.

Это событие нельзя отменить.

Синтаксис

Используйте имя события в методах, таких как addEventListener(), или задайте свойство обработчика события.

addEventListener("reset", (event) => {});

onreset = (event) => {};

Тип события

Объект XRReferenceSpaceEvent. Наследуется от Event.

Свойства события

Помимо перечисленных ниже свойств, доступны свойства из родительского интерфейса Event.

referenceSpace Только для чтения

Объект XRReferenceSpace, указывающий пространство отсчёта, которое сгенерировало событие.

transform Только для чтения

Объект XRRigidTransform, указывающий положение и ориентацию родного происхождения указанного объекта referenceSpace после события, определённого относительно системы координат до события.

Описание

Событие reset указывает, что система координат была сброшена или переконфигурирована путём изменения происхождения пространства отсчёта, перемещая и поворачивая его, как указано свойством transform события. Событие отправляется до выполнения любых обратных вызовов кадров анимации для отрисовки ожидаемого кадра, чтобы гарантировать, что эти обратные вызовы имеют доступ к обновлённой системе координат.

Существует ряд причин, по которым может произойти сброс. Наиболее распространёнными из них являются следующие:

  • Пользователь вручную сбросил систему координат, например, попросив гарнитуру перекалиброваться, чтобы убедиться, что направление взгляда и контроллеры рук синхронизированы с фактическим положением и направлением взгляда пользователя. Это в основном проблема для пространств отсчёта local или local-floor.
  • Для пространства отсчёта bounded-floor система координат может быть сброшена, если пользователь выходит за пределы пространства отсчёта и входит в новое (например, при переходе с одного уровня на другой в игре, где каждый уровень — своя карта со своей системой координат).
  • Система отслеживания временно потеряла пользователя, а затем снова его нашла, но только после того, как он перемещался достаточно, чтобы выйти из непосредственной близости от последнего известного положения. В основном проблема для пространств отсчёта unbounded.
  • Пользователь находится в пространстве отсчёта unbounded и достаточно далеко отошёл от начальной точки (происхождения пространства отсчёта), что создаёт проблемы с плавающей точкой или другими формами ошибок или дрейфа. Таким образом, система координат сбрасывается с новым происхождением в или около текущего положения пользователя.
  • Инфраструктура WebXR или драйверы оборудования обнаружили, что устройство временно потеряло отслеживание, что привело к несовпадению положения и ориентации оборудования и программного обеспечения.

Примечание: Событие reset не произойдёт, если пространство отсчёта сможет восстановить отслеживание своего предыдущего происхождения, поскольку это означает, что происхождение не было вынуждено быть перемещено. Это событие генерируется только тогда, когда происхождение необходимо переместить для восстановления после потери отслеживания.

Вручную сброс

Если вы когда-либо пользовались VR-гарнитурой, вы, вероятно, сталкивались со случаями, когда, хотя вы смотрите прямо, гарнитура думает, что вы смотрите вверх или вниз; или когда вы направляете контроллер прямо вперёд, но он думает, что вы направляете его вверх и вправо. В таких случаях обычно нужно удерживать кнопку и это заставляет мир синхронизироваться с текущей ориентацией устройства. Это происходит путём отправки события reset в пространство отсчёта или пространства отсчётов, которые основаны на ориентации гарнитуры.

Обработка разрывов

Вы можете обработать скачки в положении зрителя, следя за булевым свойством XRPose emulatedPosition. Если скачок в положении зрителя совпадает с переключением emulatedPosition с true на false, зритель восстановил отслеживание, и его новое положение представляет собой исправление по сравнению с ранее эмулированными значениями. Это обычно желаемое поведение, если ваш сайт или приложение не моделирует движение в пространстве, явно изменяя положение и/или ориентацию зрителя (а не физические движения пользователя, используемые устройством XR для ввода движения).

Однако, если используется такой вид «телепортации», вы хотите избежать скачка положения пользователя после восстановления отслеживания, так как это может вызвать дополнительный и потенциально резкий скачок. Вместо этого вы можете интегрировать emulatedPosition в смещение телепортации, рассчитанное до вызова getOffsetReferenceSpace() для создания нового пространства отсчёта, обновлённое эффективное происхождение которого скорректировано на расстояние, на которое переместилось положение зрителя с предыдущего кадра. Таким образом, положение пользователя меняется только один раз, а не дважды.

Влияние размера разрыва

Событие reset не будет сгенерировано, если разрыв достаточно мал, чтобы устройство могло восстановить отслеживание в той же области отслеживания. Оно также не будет сгенерировано для неограниченного пространства отсчёта, так как оно вносит небольшие корректировки в своё родное происхождение со временем для поддержания стабильности пространства вблизи пользователя; только значительные разрывы вызовут сброс.

Примеры

Для добавления обработчика события reset вы можете использовать один из двух способов. Во-первых, вы можете использовать метод addEventListener():

viewerRefSpace.addEventListener("reset", (event) => {
  /* perform reset related tasks */
});

Второй вариант — задать свойство обработчика события XRReferenceSpace для объекта onreset:

viewerRefSpace.onreset = (event) => {
  /* perform reset related tasks */
};

Спецификации

Спецификация
API устройств WebXR
# eventdef-xrreferencespace-reset
API устройств WebXR
# dom-xrreferencespace-onreset

Совместимость с браузерами

Рабочий стол Мобильный
Chrome Edge Firefox Opera Safari Chrome Android Firefox for Android Opera Android Safari на iOS Samsung Internet WebView Android
reset_event 79 79 Нет 66 Нет 79 Нет 57 Нет 11.2 Нет

© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/XRReferenceSpace/reset_event

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API