【问题标题】:4x4 matrix last element significance?4x4矩阵最后一个元素的意义?
【发布时间】:2012-04-10 18:48:59
【问题描述】:

我希望在 4x4 矩阵上搭载浮点值,我正在传输。所讨论的矩阵用于各种 xyz 矢量变换。据我了解,矩阵的前 3x3 有助于旋转和缩放变换,前 3 行的第 4 个值偏移变换的枢轴,底行的前 3 个元素执行位置偏移,但最后一个是什么元素呢?据我所见,它始终为 1 并且绝对什么都不做,我好好利用它有什么害处吗?

【问题讨论】:

  • 什么设施/工具/API/等。你用这个吗?这不是一个数学/矩阵标准,它也是你传递这个矩阵的惯例。
  • 虽然我的猜测是它控制缩放。
  • 矩阵使用 d3dx 函数创建并应用于 hlsl 环境,缩放也是我的第一个想法,但我在随机向量上尝试了 100 个随机矩阵,而更改最后一个值完全没有任何效果
  • 啊,Direct3D。我会添加标签,以便知道的人可以回复。
  • 好吧,尽管它在将矩阵与向量3 相乘方面没有什么区别,但它确实在矩阵*矩阵相乘方面有所不同(阅读巨大的灾难),所以我想它对某些东西很有用,我就别管它了。

标签: graphics matrix 3d direct3d


【解决方案1】:

如果(正如您的问题所暗示的那样)约定是点是列向量,并且前 3 行的最后一个元素决定了翻译,那么底行的前 3 个元素是 不是位置偏移:变换矩阵的第 4 行用于透视投影,这是相机将 3D 点映射到 2D 视口的方式。 4x4 矩阵如何用于映射点的草图:

result   =       4x4 matrix      *  point

[ x' ]       [ Rxx Rxy Rxz Tx ]     [ x ]
[    ]       [                ]     [   ]     ->    R** is the rotation/scaling matrix
[ y' ]       [ Ryx Ryy Ryz Ty ]     [ y ]
[    ]   =   [                ]  *  [   ]           T* is the translation vector
[ z' ]       [ Rzx Rzy Rzz Tz ]     [ z ]
[    ]       [                ]     [   ]           P* fixes the camera projection plane
[ w' ]       [ Px  Py  Pz  Pw ]     [ w ]

-> x' = dot_product3([Rxx,Rxy,Rxz], [x,y,z])  + Tx * w
-> y' = dot_product3([Ryx,Ryy,Ryz], [x,y,z])  + Ty * w
-> z' = dot_product3([Rzx,Rzy,Rzz], [x,y,z])  + Tz * w
-> w' = dot_product4([Px,Py,Pz,Pw], [x,y,z,w])

3D 点的最后一步 -> 2D 屏幕映射是除以第 4 个 (w') 坐标 - 因此,对于标准几何变换,最后一行通常应该是 [0,0,0,1],留下 @ 987654324@坐标不变。

如果底行的前 3 个元素不是0,则矩阵通常会生成奇怪的、不均匀的 3D 空间失真。而且,虽然可以将最后一个元素用作统一的逆缩放因子,但最好使用左上角的 3x3 子矩阵进行缩放,并将底行专门留给相机。

【讨论】:

    猜你喜欢
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 2013-07-21
    • 2014-08-22
    • 1970-01-01
    • 1970-01-01
    • 2010-11-12
    • 2017-08-21
    相关资源
    最近更新 更多