4x4 矩阵在 3d 图形中如何工作?

Posted

技术标签:

【中文标题】4x4 矩阵在 3d 图形中如何工作?【英文标题】:How does 4x4 matrix work in 3d graphic? 【发布时间】:2015-05-18 17:40:01 【问题描述】:

我正在学习 3D 图形,但偶然发现了我不完全理解的矩阵。我有一个 3d 对象,具有拓扑、坐标系中的点和 ECS(对象的 4x4 矩阵)。 ECS 是:

-1.1247455413666E-32 , 1.83690953073357E-16, 1                    , -95  , 
 1                   , 6.12303176911189E-17, 0                    , 604  , 
-6.12303176911189E-17, 1                   , -1.83690953073357E-16, 200.5, 
 0                   , 0                   , 0                    , 1    , 

用逗号分隔的每一行是什么意思?这些是翻译向量吗?

【问题讨论】:

你需要做一些研究。参见,例如***.com/questions/11966779/… 每一行是矩阵中的一行;逗号分隔该行中的列值。这是一个变换矩阵。不了解矩阵是无法理解的。 看这里***.com/a/28084380/2521214 如果您对 3D 图形很认真,就无法避免矩阵和向量。至于“为什么”使用4x4矩阵,这属于homogenous coordinates的主持。 【参考方案1】:

矩阵在向量空间之间定义linear transformations。所有线性变换都将域的原点映射到范围的原点。因此 3x3 矩阵无法对 3D 向量执行平移,因为一个空间中的原点只能使用线性映射映射到另一个空间中的原点。

为了克服这个问题,我们可以通过使用额外的维度来伪造系统执行翻译,其中所有向量在最后一个向量分量中都将具有 1。这些 4D 向量永远不会位于原点(在最后一个分量中有 1),因此不需要始终映射到原点。通过使用它,我们可以构造一个 4x4 矩阵来执行平移,如下所示:

| 1  0  0  Tx|   | x |   | x + Tx |
| 0  1  0  Ty|   | y |   | y + Ty |
| 0  0  1  Tz| x | z | = | z + Tz |
| 0  0  0   1|   | 1 |   |   1    |

出于渲染目的,最后一个位置的 1 被丢弃。

【讨论】:

感谢您的解释。 Tz 和 z 之间的 x 代表什么? 这是一个乘法运算符。 en.wikipedia.org/wiki/Matrix_multiplication 很好的解释。我一直想知道为什么 3d 图形转换看起来是线性的,但不使用 3x3 矩阵。原来我忘记了线性变换的“原点必须留在原点”的约束。带有 1 的“假”4x4 矩阵因此“从不在原点”完美地解释了这一点。【参考方案2】:

左上角的3x3块给出了坐标系的旋转,最后一列的上3个坐标给出了平移向量。

这种仿射参数化的一般思想是,对于变换,乘以

[ x, y, z, 1 ]^T

从右边。

【讨论】:

以上是关于4x4 矩阵在 3d 图形中如何工作?的主要内容,如果未能解决你的问题,请参考以下文章

3D计算机图形学变换矩阵欧拉角四元数

了解 ARKit 世界变换矩阵

3D图形:矩阵、欧拉角、四元数与方位的故事

怎么在Labview中显示比较复杂的3D图形

为啥opengl中,“gl_Position”是vec4类型的?

3D图形学在游戏开发中的,矩阵,四元数,欧拉角之间的底层转换算法。