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