ARKit - 变换矩阵中不同列代表什么?

7

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

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


2
我不喜欢只是贴一个链接,但这是转换矩阵的好起点:https://en.wikipedia.org/wiki/Transformation_matrix - jlsiewert
2个回答

21

4x4 SIMD 矩阵

RealityKit、ARKit、SceneKit 和 ARCore(以及已弃用的 Sceneform)框架使用 4x4 变换矩阵simd_float4x4 矩阵)来平移旋转缩放剪切 3D 对象。在 3D 图形中,我们使用具有 16 个元素的矩阵。默认的单位矩阵(即 Identity)4x4 矩阵如下:

enter image description here

在这十六个元素之间,有六个不同的剪切系数:

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

在剪切矩阵中,它们如下所示:

enter image description here

由于矩阵中没有旋转系数,因此六个剪切系数和三个比例系数使您可以使用神奇的三角函数(sincos)绕XYZ轴旋转3D对象。

以下是一个关于如何使用剪切和缩放元素绕Z轴(逆时针方向)旋转3D对象的示例:

enter image description here

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

enter image description here

4x4矩阵中的3个变换元素 (tx,ty,tz) 位于最后一列:

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

在ARKit、ARCore、RealityKit和SceneKit中,列的索引分别为:0123。第四列(索引3)包含了平移值:
var translation = matrix_identity_float4x4

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

附加材料

我建议您阅读我在Medium上关于4x4变换矩阵的图解故事

我也建议您阅读如何将矩阵记录到文件中,以便将它们传递给Maya的文章。

透视投影和正投影

看一下如何在ARCore和Sceneform中设置正投影的示例。

4x4矩阵底部行中的数值用于透视投影


16
如果您刚接触3D技术,这些变换矩阵可能会让您感到神奇。基本上,在ARKit空间中的每个“点”都由一个4x4的变换矩阵表示。该矩阵描述了与ARKit原点(ARKit唤醒世界的点)的距离,通常称为平移,并描述设备的方向,即俯仰、翻滚和偏航。变换矩阵也可以描述比例尺度,不过通常在渲染某物之前您不需要处理比例尺度。
那么这些列代表什么呢?这有点复杂,但请记住第四列的前三个元素是x、y和z的平移。这很实用。其余部分包含比例尺度和旋转信息。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接