【问题标题】:How does 4x4 matrix work in 3d graphic?4x4 矩阵在 3d 图形中如何工作?
【发布时间】: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    , 

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

【问题讨论】:

标签: math matrix 3d three.js


【解决方案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

从右边。

【讨论】:

    猜你喜欢
    • 2014-11-13
    • 2014-05-17
    • 2011-12-02
    • 2012-05-24
    • 2013-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多