ARKit – 变换矩阵中的不同列代表啥?

Posted

技术标签:

【中文标题】ARKit – 变换矩阵中的不同列代表啥?【英文标题】:ARKit – What do the different columns in Transform Matrix represent?ARKit – 变换矩阵中的不同列代表什么? 【发布时间】:2018-01-08 06:34:57 【问题描述】:

ARAnchor 的 4x4 矩阵有 4 列。矩阵的第四列包含 xyz 坐标的 3 个平移值。

我想知道其他 3 列代表什么?

【问题讨论】:

我讨厌只删除一个链接,但这是转换矩阵的一个很好的起点:en.wikipedia.org/wiki/Transformation_matrix 【参考方案1】:

ARKit、RealityKit 和 SceneKit 框架使用 4 x 4 Transformation Matrices 来平移、旋转、缩放和剪切 3D 对象(就像 simd_float4x4 矩阵类型一样)。让我们看看这些矩阵长什么样。

在 3D 图形中,我们经常使用包含 16 个有用元素的 4x4 矩阵。身份4x4矩阵如下:

在这 16 个元素之间有 6 个不同的剪切系数:

shear XY
shear XZ
shear YX
shear YZ
shear ZX
shear ZY

在剪切矩阵中它们如下:

因为在此矩阵中根本没有Rotation coefficients,所以六个Shear coefficients 和三个Scale coefficients 允许您围绕XY 和@987654345 旋转3D 对象@axis 使用神奇的三角函数(sincos)。

下面是一个如何使用剪切和缩放元素围绕其Z 轴旋转 3D 对象 (CCW) 的示例:

使用剪切和缩放元素查看 3 种不同的旋转模式:

当然,4x4Matrix 中的 3 个翻译元素(tx,ty,tz)位于最后一列:

 ┌               ┐
 |  1  0  0  tx  |
 |  0  1  0  ty  |
 |  0  0  1  tz  |
 |  0  0  0  1   |
 └               ┘

ARKit、SceneKit 和 RealityKit 中的列索引为:0123

第四列(索引 3)用于翻译值:

var translation = matrix_identity_float4x4

translation.columns.3.x
translation.columns.3.y
translation.columns.3.z

您可以在 Medium 上阅读我关于 MATRICES 的插图故事

透视和正交投影

位于4x4 matrix 底行的值用于perspective projection。

当然,您还需要查看如何设置orthographic projection 的示例。

【讨论】:

【参考方案2】:

如果您是 3D 新手,那么这些转换矩阵看起来就像魔术一样。基本上,ARKit 空间中的每个“点”都由一个 4x4 变换矩阵表示。该矩阵描述了距 ARKit 原点(ARKit 唤醒到世界的点)的距离,通常称为平移,以及设备的方向,即俯仰、滚动和偏航。变换矩阵也可以描述比例,但通常在渲染之前您不会处理比例。

这些列是什么意思?这很复杂,但请记住第 4 列的前 3 个元素是 x、y、z 平移。那会派上用场的。其余部分保存缩放和旋转信息。

【讨论】:

以上是关于ARKit – 变换矩阵中的不同列代表啥?的主要内容,如果未能解决你的问题,请参考以下文章

了解 ARKit 世界变换矩阵

雅可比矩阵(偏导数矩阵)的逆矩阵代表啥含义

将矩阵化简为行最简形矩阵有啥技巧,或者一般有啥特定的步骤么?

如何理解矩阵相乘的几何意义或现实意义

MATLAB中如何构造一个矩阵,该矩阵中每一列个数不等

向量乘矩阵表示啥?