XRViewerPose
Ограниченная доступность
Эта функция не является базовой, так как не работает в некоторых из наиболее широко используемых браузеров.
Защищённый контекст: Эта функция доступна только в защищённых контекстах (HTTPS) в некоторых или во всех поддерживающих браузерах.
Интерфейс API устройства WebXR XRViewerPose представляет собой позу (положение и ориентацию) точки зрения пользователя в сцене. Каждый XRViewerPose может иметь несколько представлений, например, для отображения небольшого разделения между левым и правым глазом.
Это представление может представлять всё — от точки зрения шлема XR пользователя до точки зрения, представленной движением аватара игрока с помощью мыши и клавиатуры, отображённой на экране, до виртуальной камеры, которая захватывает сцену для зрителя.
Свойства экземпляра
В дополнение к свойствам, унаследованным от XRPose, XRViewerPose включает в себя следующие:
-
viewsТолько для чтения -
Массив объектов
XRView, по одному для каждой точки зрения в сцене, которая необходима для представления сцены пользователю. Типичный шлем предоставляет позу зрителя с двумя представлениями, чьё свойствоeyeравно либоleft, либоright, указывая, какой глаз представляет это представление. В совокупности эти представления могут воспроизвести 3D-эффект при отображении на устройстве XR.
Примечания по использованию
Объект XRViewerPose используется для описания состояния зрителя веб-сцены XR, отслеживаемой оборудованием XR пользователя. Зритель может быть виртуальным представлением пользователя, или он может представлять другое устройство или интерфейс, который может служить источником позиции и ориентации, составляющих представление сцены. Например, каждый игрок в MMORPG может иметь экземпляр XRViewerPose для вычисления того, что он видит; если игра предоставляет механизм, который сообщает игроку, видит ли его другой игрок или он видит другого игрока, эта информация становится важной.
Экземпляр XRViewerPose всегда получается и ссылается на существующий XRReferenceSpace. Это гарантирует, что позиции и ориентации сообщаются с использованием ожидаемой относительной системы координат.
Для отрисовки сцены с помощью XRViewerPose, представляющего голову пользователя, необходимо перебрать представления в массиве views, рисуя их по одному. Вызывая viewport() в контексте WebGL, указав XRView в качестве входных данных, вы можете получить область видимости для использования при отрисовке, чтобы нарисовать кадр для этого глаза в соответствующей части поверхности рисования.
Кроме того, при отрисовке сцены для зрителей или других игроков в многопользовательской игре преобразование transform объекта XRViewerPose может использоваться для определения расположения и направления взгляда других игроков в игре, чтобы они отображались в правильном месте с правильным направлением.
Позу зрителя для кадра анимации, представленного XRFrame, можно получить, вызвав метод кадра getViewerPose(), указав пространство ссылок, в котором должна быть вычислена позиция начала координат. Возвращённый XRViewerPose сообщает о том, где находится зритель и в каком направлении он смотрит в момент выполнения кадра.
Примеры
В этом примере — части кода для отрисовки XRFrame, getViewerPose() вызывается для получения XRViewerPose с использованием того же пространства ссылок, которое используется кодом в качестве базового пространства ссылок. Если возвращается допустимая поза, кадр отрисовывается путём очистки буфера заднего плана и последующей отрисовкой каждого представления в позе; скорее всего, это представления для левого и правого глаза.
const pose = frame.getViewerPose(xrReferenceSpace);
if (pose) {
const glLayer = xrSession.renderState.baseLayer;
gl.bindFrameBuffer(gl.FRAMEBUFFER, glLayer.framebuffer);
gl.clearColor(0, 0, 0, 1);
gl.clearDepth(1);
gl.clear(gl.COLOR_BUFFER_BIT, gl.DEPTH_BUFFER_BIT);
for (const view of pose.views) {
const viewport = glLayer.getViewport(view);
gl.viewport(viewport.x, viewport.y, viewport.width, viewport.height);
/* render the scene for the eye view.eye */
}
}
Передача каждого view в getViewport() возвращает область видимости WebGL для применения, чтобы выходные данные отрисовки были правильно расположены в буфере для отрисовки соответствующего глаза на выводе устройства.
Этот код взят из Отрисовка кадра в нашем примере WebXR «Движение и движение». Вы можете получить больше контекста и узнать гораздо больше на этой странице.
Спецификации
| Спецификация |
|---|
| API устройства WebXR # xrviewerpose-interface |
Совместимость с браузерами
| Рабочий стол | Мобильное устройство | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox for Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | |
XRViewerPose |
79 | 79 | Нет | 66 | Нет | 79 | Нет | 57 | Нет | 11.2 | Нет |
views |
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/XRViewerPose