XRRigidTransform: matrix 屬性

可用性有限

此特性不是基線特性,因為它在一些最廣泛使用的瀏覽器中不起作用。

安全上下文: 此功能僅在安全上下文(HTTPS)中可用,且支援此功能的瀏覽器數量有限。

只讀的 XRRigidTransform 屬性 matrix 返回由該物件表示的變換矩陣。然後,可以透過將此返回的矩陣與列向量預乘,來使向量在由 orientation 指定的 3D 旋轉後進行旋轉,再由 position 進行平移。

一個包含 16 個條目的 Float32Array,它表示由 positionorientation 屬性描述的 4x4 變換矩陣。

用法說明

矩陣格式

WebGL 中使用的所有 4x4 變換矩陣都儲存在 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 放置在最右邊的列中,如下所示,從而得到一個平移矩陣,該矩陣將透過每個維度中的指定距離變換座標系,而沒有旋轉變化。這裡 pxpypzDOMPointReadOnly positionxyz 成員的值。

[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 使用指定的變換矩陣來渲染匹配給定名稱的物件,以定位和定向它。

js
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);

規範

規範
WebXR Device API
# dom-xrrigidtransform-matrix

瀏覽器相容性