这是我的讲师在课程中告诉我的:

我们只考虑4 * 4矩阵。这些用于旋转,缩放或平移对象(或这些操作的任意组合)。稍后还将在虚拟相机模型的实现中使用矩阵。如果您不知道矢量变换和点变换之间的区别,请查找它。

我似乎无法为这个问题找到答案,也没有为此网站建立帐户。

评论

作为所有其他答案的补充,并且由于其他人已经在其他地方长时间回答了此问题,您可以查看:scratchapixel.com/lessons/…

#1 楼

这是简单的答案。

在4D中,为了能够将它们乘以4x4矩阵,向量表示为(x,y,z,0),点表示为(x,y, z,1)。

由于4x4矩阵的第四行表示矩阵的平移,因此上述表示使得点受平移影响,而矢量不受此影响。

矢量和点都受旋转,缩放等因素的影响。

注意:

如果您希望矢量具有矢量,则需要进行更深入的讨论。某些属性。例如,如果您用与变换三角形顶点相同的矩阵来变换三角形的法线,则实际上它可能不再是该三角形的法线向量。这是因为法向向量与其从其计算出的顶点具有某种反比关系。

评论


$ \ begingroup $
法线不起作用,因为它们不是矢量。虽然不知道这个概念的介绍。
$ \ endgroup $
– MB雷诺兹
16年11月24日在13:14

$ \ begingroup $
@MBReynolds在数学上,法线就像矢量一样是点或方向。这里的问题是,我们应用于曲面点以对其进行变换的变换不适用于法线。
$ \ endgroup $
–nbro
17年1月18日在13:05



$ \ begingroup $
表面法线是双向量,而不是向量。我们可以通过两个向量的叉积找到法线,结果是一个双向量。请参阅Per Vogensen的信息:gist.github.com/pervognsen/c6b1d19754c2e8a38b10886b63d7bf2d
$ \ endgroup $
– MB雷诺兹
17年1月18日在13:55

#2 楼

从我学到的知识来看,因为我也是一个学生,所以您希望使用$ 4 \乘以4 $的矩阵,以便以相同的方式处理旋转,缩放和平移,即乘以一个矩阵(即$ 4 \ times 4 $矩阵)。

请记住,没有这些$ 4 \ times 4 $矩阵,平移将通过向量求和来表示,而旋转和缩放则分别使用向量和标量因子。

现在的问题是:我们如何从3D坐标系传递到4D坐标系?答案是“同质坐标”。

那是什么意思?我们构造$ 4 x 4矩阵来表示旋转,缩放和平移,因此我们仅使用矩阵乘法来表示变换(例如旋转,缩放等)。我们将如何分别构建它们,这是更具体的,但是您可以在网络上查看它。

此时,我们有$ 4 \ times 4 $矩阵和3D向量,这还没有用,因为您不能将$ 4 \ times 4 $矩阵和$ 3D $向量相乘,因为维不匹配。这就是为什么当我们使用原始坐标时,我们还需要将给定的3D点转换为相应的4D点。

我们如何做到?

我们区分方向矢量和位置矢量。顾名思义,方向向量具有指向的方向。我们也关心它们的长度,但是它们不受翻译的影响,因为我们不在乎它们的位置。位置向量(或简称为“点”)可以平移或移动;它们通常是相对于原点表示的,即从原点到点本身的向量。

我们通过添加一个$ 0 $作为相应的同质矢量的$ 4 $坐标来变换3D方向矢量:我们添加一个零,因为这基本上消除了平移的影响。我们对位置矢量进行了类似的操作,但是由于相反的原因,我们添加了$ 1 $而不是$ 0 $。

例如,如果我们有$ 3D $方向矢量$ v = \ begin {pmatrix} v_1 \\ v_2 \\ v_3 \ end {pmatrix} $,我们将其转换为$ v'= \ begin {pmatrix} v_1 \\ v_2 \\ v_3 \\ 0 \ end {pmatrix} $。同样,如果我们有一个点矢量$ u = \ begin {pmatrix} u_1 \\ u_2 \\ u_3 \ end {pmatrix} $,我们会将其转换为$ u'= \ begin {pmatrix} u_1 \\ u_2 \\ u_3 \\ 1 \ end {pmatrix} $

注意:要从齐次坐标转换回对应的$ 3D $坐标,您不能简单地删除$ 4th $坐标,除非它仍然等于$ 1 $(或分别为$ 0 $)。

评论


$ \ begingroup $
如果您注意到在实际的齐次坐标系中,任何$ w \ ne 0 $的$(wx,wy,wz,w)$也是点$(x ,y,z)$。从普通3D坐标转换为4D投影坐标时,选择$ w = 1 $很方便,但是在逆转换中允许$ w $的其他值也使我们能够使用4D矩阵乘法表示透视变换。
$ \ endgroup $
–伊尔马里·卡洛宁
16-11-20在7:24



#3 楼

如果要查找向量和点的定义,则向量为:


完全由量值和方向指定的量,例如速度。 > http://www.thefreedictionary.com/vector


要点是:


一个无量纲的几何对象,除了位置外没有其他属性。
http://www.thefreedictionary.com/point


所以可以说向量是具有比例的方向,而点是位置。 />
因此,如果变换向量,则只需旋转和缩放即可。对于点,您还可以对其进行平移(点的旋转和缩放围绕原点进行,因为它只是点本身无法旋转的位置)。

在大多数情况下,矢量和将点放入同一容器中,该容器具有4个分量。唯一的区别是w分量。如果w分量为0,则为方向。如果它是1,则向量是一个点。

其原因可以在矩阵本身中找到。
它利用将向量与4个分量相乘的方式4x4矩阵。如果您不知道它是如何工作的,我建议您使用Google。

大多数情况下,您使用4x4矩阵。正常的转换矩阵可能看起来像这样:
\开始{bmatrix} rot + scale&rot + scale&rot + scale&translation \\ rot + scale&rot + scale&rot + scale&translation \\ rot + scale&rot + scale&rot + scale&translation \\ 0&0&0&1 \ end {bmatrix }
(旋转和缩放比例可以放在3x3区域中,因此,仅旋转和缩放比例也可以使用3x3矩阵,但是在进行平移时,我们需要第4列。)

如您所见,如果最后一个分量为0,则您有一个与0的乘法,因此结果为0,并且没有转换。

这使得在带有多边形对象的计算机图形中变得容易。您可以使用相同的变换矩阵来变换位置,但也可以变换法线。因为法线的w分量设置为0,而位置的w分量为1,所以法线只是旋转(并且会缩放,这可能会导致一些奇怪的事情,因此大多数情况下,法线在之后进行归一化。实际上,由于奇怪的东西,实际上建议使用相同的矩阵进行位置和旋转!请查看@JarkkoL的注释。)然后转换位置(并围绕原点旋转和缩放比例)。

希望我没弄错:P,对您有帮助!

评论


$ \ begingroup $
法线不会使用与位置相同的变换矩阵进行变换。您需要计算3x3子矩阵的转置的逆,以正确变换法线以进行不均匀缩放和/或倾斜的变换。
$ \ endgroup $
–JarkkoL
16-11-19在21:37



$ \ begingroup $
@JarkkoL是的,你是对的。最好不要使用相同的矩阵,但是要根据实现情况来完成。大多数时候,人们不太关心法线的倾斜,因为他们要么根本不使用非均匀缩放,要么根本不使用缩放。有关变换位置和法线的那部分更多的是使用一个容器可能有用。
$ \ endgroup $
–bram0101
16年11月19日在21:54