Spec-Zone.ru › Web APIs

XRRigidTransform: свойство matrix

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

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

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

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

Только для чтения XRRigidTransform свойство matrix возвращает матрицу преобразования, представленную объектом. Полученную матрицу затем можно умножить слева на столбец-вектор, чтобы повернуть вектор на 3D угол, заданный orientation, а затем переместить его на position.

Значение

Массив Float32Array содержащий 16 элементов, представляющий 4x4 матрицу преобразования, описываемую свойствами position и orientation.

Примечания по использованию

Формат матрицы

Все 4x4 матрицы преобразований, используемые в WebGL, хранятся в 16-элементных массивах Float32Array. Значения хранятся в массиве в порядке следования столбцов сверху вниз; то есть каждый столбец записывается в массив сверху вниз, прежде чем перейти к следующему столбцу справа и записать его в массив. Таким образом, для массива [a0, a1, a2, …, a13, a14, a15], матрица выглядит следующим образом:

[a0a4a8a12a1a5a9a13a2a6a10a14a3a7a11a15]\begin{bmatrix} a[0] & a[4] & a[8] & a[12]\\ a[1] & a[5] & a[9] & a[13]\\ a[2] & a[6] & a[10] & a[14]\\ a[3] & a[7] & a[11] & a[15]\\ \end{bmatrix}

При первом запросе matrix вычисляется. После этого он должен быть кэширован для повышения производительности.

Создание матрицы

В этом разделе, предназначенном для более опытных пользователей, рассматривается, как API вычисляет матрицу для заданного преобразования. Начинается с выделения новой матрицы и записи в неё единичной 4x4 матрицы:

[1000010000100001]\begin{bmatrix} 1 & 0 & 0 & 0\\ 0 & 1 & 0 & 0\\ 0 & 0 & 1 & 0\\ 0 & 0 & 0 & 1 \end{bmatrix}

Это преобразование не изменит ни ориентацию, ни положение любой точки, вектора или объекта, к которому оно применяется.

Затем position помещается в правый столбец, как показано ниже, что приводит к матрице переноса, которая преобразует систему координат на указанное расстояние по каждому измерению без поворота. Здесь px, py и pz — значения членов x, y, и z объекта DOMPointReadOnly position.

[100px010py001pz0001]\begin{bmatrix} 1 & 0 & 0 & x\\ 0 & 1 & 0 & y\\ 0 & 0 & 1 & z\\ 0 & 0 & 0 & 1 \end{bmatrix}

Затем создаётся матрица вращения путём вычисления матрицы вращения столбца-вектора из унитарного кватерниона, заданного orientation:

[1-2(qy2+qz2)2(qxqy-qzqw)2(qxqz+qyqw)02(qxqy+qzqw)1-2(qx2+qz2)2(qyqz-qxqw)02(qxqz-qyqw)2(qyqz+qxqw)1-2(qx2+qy2)00001]\begin{bmatrix} 1 - 2(q_y^2 + q_z^2) & 2(q_xq_y - q_zq_w) & 2(q_xq_z + q_yq_w) & p_x\\ 2(q_xq_y + q_zq_w) & 1 - 2(q_x^2 + q_z^2) & 2(q_yq_z - q_xq_w) & p_y\\ 2(q_xq_z - q_yq_w) & 2(q_yq_z + q_xq_w) & 1 - 2(q_x^2 + q_y^2) & p_z\\ 0 & 0 & 0 & 1 \end{bmatrix}

Окончательное преобразование matrix вычисляется путём умножения матрицы переноса на матрицу вращения в порядке (translation * rotation). Это даёт окончательную матрицу преобразования, возвращаемую matrix:

[1-2(qy2+qz2)2(qxqy-qzqw)2(qxqz+qyqw)px2(qxqy+qzqw)1-2(qx2+qz2)2(qyqz-qxqw)py2(qxqz-qyqw)2(qyqz+qxqw)1-2(qx2+qy2)pz0001]\begin{bmatrix} 1 - 2(q_y^2 + q_z^2) & 2(q_xq_y - q_zq_w) & 2(q_xq_z + q_yq_w) & p_x\\ 2(q_xq_y + q_zq_w) & 1 - 2(q_x^2 + q_z^2) & 2(q_yq_z - q_xq_w) & p_y\\ 2(q_xq_z - q_yq_w) & 2(q_yq_z + q_xq_w) & 1 - 2(q_x^2 + q_y^2) & p_z\\ 0 & 0 & 0 & 1 \end{bmatrix}

Примеры

В этом примере создается преобразование для создания матрицы, которая может использоваться в качестве преобразования при отрисовке объектов WebGL, чтобы разместить объекты в соответствии с заданным смещением и ориентацией. Затем matrix передается в функцию библиотеки, которая использует WebGL для отрисовки объекта, соответствующего заданному имени, используя матрицу преобразования, указанную для позиционирования и ориентации.

let transform = new XRRigidTransform(
  { x: 0, y: 0.5, z: 0.5 },
  { x: 0, y: -0.5, z: -0.5, w: 1 },
);
drawGLObject("magic-lamp", transform.matrix);

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

Спецификация
API устройств WebXR
# dom-xrrigidtransform-matrix

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

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

Spec-Zone.ru

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