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

Math 4x4矩阵如何在3d图形中工作?,math,matrix,3d,three.js,Math,Matrix,3d,Three.js,我正在学习3d图形,偶然发现了矩阵,但我并不完全理解。我有一个3d对象,具有拓扑、坐标系中的点和ECS(对象的4x4矩阵)。 ECS是: 用逗号分隔的每一行是什么意思?这些是平移向量吗?左上角的3x3块表示坐标系的旋转,最后一列的上3个坐标表示平移向量 这种仿射参数化的一般思想是,对于变换,一乘一 [ x, y, z, 1 ]^T 右起。矩阵定义向量空间之间的关系。所有线性变换都将域的原点映射到范围的原点。因此,3x3矩阵无法对3D向量执行平移,因为一个空间中的原点只能使用线性映射映射到另一个

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


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

左上角的3x3块表示坐标系的旋转,最后一列的上3个坐标表示平移向量

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

[ x, y, z, 1 ]^T
右起。

矩阵定义向量空间之间的关系。所有线性变换都将域的原点映射到范围的原点。因此,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将被删除。

您需要进行一些研究。例如,请参见矩阵中的每一行;逗号分隔该行中的列值。这是一个变换矩阵。如果你不了解矩阵,你就无法理解它。看这里,如果你认真对待3d图形,你就无法避免矩阵和向量。至于“为什么”使用4x4矩阵,这属于的赞助。感谢您的解释。z和z之间的x代表什么?这是一个乘法运算符。很好的解释。我一直想知道为什么三维图形变换看起来是线性的,但不使用3x3矩阵。原来我忘记了线性变换的“原点必须保持在原点”约束。带有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    |