Spec-Zone.ru › Web APIs

XRView: свойство transform

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

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

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

Экспериментальная: Это экспериментальная технология
Перед использованием в производстве внимательно проверьте таблицу совместимости браузеров.

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

Только для чтения transform свойство интерфейса XRView — это объект XRRigidTransform, который предоставляет положение и ориентацию точки обзора относительно XRReferenceSpace, указанного при вызове метода XRFrame.getViewerPose() для получения объекта представления.

С помощью transform, вы можете расположить представление как камеру в 3D-сцене. Если вам нужен более традиционный матрицы вида, вы можете получить её используя view.transform.inverse.matrix; это получает базовую matrix преобразования inverse.

Значение

Объект XRRigidTransform, определяющий положение и ориентацию точки обзора, представленной XRView.

Примеры

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

В этом примере показан фрагмент кода, используемый при отрисовке XRFrame, который использует преобразование представления для размещения объектов в мире во время отрисовки.

const modelViewMatrix = mat4.create();
const normalMatrix = mat4.create();

for (const view of pose.views) {
  const viewport = glLayer.getViewport(view);
  gl.viewport(viewport.x, viewport.y, viewport.width, viewport.height);

  for (const obj of world.objects) {
    mat4.multiply(modelViewMatrix, view.transform.inverse.matrix, obj.matrix);
    mat4.invert(normalMatrix, modelViewMatrix);
    mat4.transpose(normalMatrix, normalMatrix);

    obj.render(modelViewMatrix, normalMatrix);
  }
}

Две матрицы создаются вне цикла отрисовки; это позволяет избежать многократного выделения и освобождения памяти для матриц, а в целом уменьшает нагрузку, повторно используя одну и ту же матрицу для каждого отрисовываемого объекта.

Затем мы итерируем по каждому XRView, найденному в списке XRViewerPose views. Обычно их два: для левого и правого глаза, но может быть и один, если используется монокулярный режим. В настоящее время WebXR не поддерживает более двух представлений на позицию, хотя в спецификации предусмотрено расширение для поддержки этого в будущем путём добавления в API.

Для каждого представления мы получаем его область видимости и передаём её в WebGL с помощью gl.viewport(). Для левого глаза это будет левая половина холста, а для правого — правая.

Затем мы итерируем по каждому объекту, составляющему сцену. Матрица вида модели каждого объекта вычисляется путём умножения его собственной матрицы, описывающей собственное положение и ориентацию, на дополнительные корректировки положения и ориентации, необходимые для соответствия движению камеры. Для преобразования матрицы преобразования, ориентированной на камеру, в матрицу преобразования, ориентированную на объект, мы используем обратную матрицу, тем самым берём матрицу, возвращаемую view.transform.inverse.matrix. Результирующая матрица вида модели будет применять все преобразования, необходимые для перемещения и поворота объекта на основе относительных положений объекта и камеры. Это будет имитировать движение камеры, хотя мы на самом деле перемещаем объект.

Затем мы вычисляем нормали для матрицы вида модели, инвертируя её и затем транспонируя.

Наконец, мы вызываем процедуру render() объекта, передавая modelViewMatrix и normalMatrix, чтобы рендерер мог правильно разместить и осветить объект.

Примечание: Этот пример взят из более крупного примера… <<<--- завершить и добавить ссылку --->>>

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

Спецификация
WebXR Device API
# dom-xrview-transform

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

Рабочие столы Мобильные устройства
Chrome Edge Firefox Opera Safari Chrome Android Firefox для Android Opera Android Safari на IOS Samsung Internet WebView Android
transform 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/XRView/transform

Spec-Zone.ru

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