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

Zaa*_*aay 2 math 3d matrix three.js

我正在学习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    , 
Run Code Online (Sandbox Code Playgroud)

每行用逗号分隔的是什么意思?这些翻译载体?

and*_*and 8

矩阵定义向量空间之间的线性变换.所有线性变换都将域的原点映射到范围的原点.因此,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    |
Run Code Online (Sandbox Code Playgroud)

出于渲染目的,删除最后位置中的1.

  • 很好的解释。我一直想知道为什么 3D 图形变换看起来是线性的但不使用 3x3 矩阵。结果我忘记了线性变换的“原点必须保持在原点”的约束。带有 1 的“假”4x4 矩阵因此“永远不会在原点”完美地解释了这一点。 (2认同)

Dr.*_*ann 4

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

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

[ x, y, z, 1 ]^T
Run Code Online (Sandbox Code Playgroud)

从右边。