XRRigidTransform: matrix 属性
只读的 XRRigidTransform 属性 matrix 返回由该对象表示的变换矩阵。然后,可以通过将此返回的矩阵与列向量预乘,来使向量在由 orientation 指定的 3D 旋转后进行旋转,再由 position 进行平移。
值
一个包含 16 个条目的 Float32Array,它表示由 position 和 orientation 属性描述的 4x4 变换矩阵。
用法说明
矩阵格式
WebGL 中使用的所有 4x4 变换矩阵都存储在 16 个元素的 Float32Array 中。值按列主序存储在数组中;也就是说,每个列从上到下写入数组,然后移动到下一列并将其写入数组。因此,对于数组 [a0, a1, a2, …, a13, a14, a15],矩阵如下所示:
首次请求时,会计算 matrix。在此之后,出于性能原因,它应该被缓存。
创建矩阵
在本节中,面向更高级的读者,我们将介绍 API 如何计算指定变换的矩阵。它首先分配一个新矩阵,并向其中写入一个 4x4 单位矩阵:
这是一个不会改变其应用的任何点、向量或对象的方向或位置的变换。
接下来,将 position 放置在最右边的列中,如下所示,从而得到一个平移矩阵,该矩阵将通过每个维度中的指定距离变换坐标系,而没有旋转变化。这里 px、py 和 pz 是 DOMPointReadOnly position 的 x、y 和 z 成员的值。
然后,通过从 orientation 指定的单位四元数计算列向量旋转矩阵来创建旋转矩阵:
最终的变换 matrix 是通过按 (translation * rotation) 的顺序将平移矩阵乘以旋转矩阵计算得出的。这将产生 matrix 返回的最终变换矩阵:
示例
在此示例中,创建了一个变换,用于生成一个矩阵,该矩阵可用作渲染 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);
规范
| 规范 |
|---|
| WebXR Device API # dom-xrrigidtransform-matrix |
浏览器兼容性
加载中…