从这个问题看来,您将需要一个四元素位置矢量,因为使用矩阵乘法修改其位置更简单。
就其本身而言,这意味着在将第四个元素视为3D点的表示时(假设不进行变换)应该简单地忽略它,但是我知道这是不正确的,因为当我将vector4提供给GPU时,如果第四个元素元素不是一个,它不会呈现-为什么?
栅格化器中的第四个元素有什么意义?
编辑:经审查,这个问题措辞不佳;第二段更准确地说:“如果第四个元素的值不在某个范围内,则不会'正确'/'按预期'呈现。”
从这个问题看来,您将需要一个四元素位置矢量,因为使用矩阵乘法修改其位置更简单。
就其本身而言,这意味着在将第四个元素视为3D点的表示时(假设不进行变换)应该简单地忽略它,但是我知道这是不正确的,因为当我将vector4提供给GPU时,如果第四个元素元素不是一个,它不会呈现-为什么?
栅格化器中的第四个元素有什么意义?
编辑:经审查,这个问题措辞不佳;第二段更准确地说:“如果第四个元素的值不在某个范围内,则不会'正确'/'按预期'呈现。”
Answers:
第四个部分是跟踪透视投影的技巧。进行透视投影时,您需要除以z:x'= x / z,y'= y / z,但这不是可以通过对x的矢量进行运算的3x3矩阵来实现的操作, y,z。达到此目的的标准技巧是附加第四个坐标w,并声明在应用了所有转换之后以及在栅格化之前,x,y,z将始终被w除。
然后,通过具有将z移至w的矩阵来完成透视投影,以便最终除以z。但是,如果您不想进行除法运算,也可以灵活地将w = 1.0。例如,如果您只想要平行投影,旋转或任何其他方式。
可以将位置编码为w = 1,方向编码为w = 0,并使用矩阵的第四行/列进行平移,这是一个不错的附带好处,但这不是附加w的主要原因。可以使用仿射变换(3x3矩阵加3分量翻译向量)来完成翻译,而看不到任何w。(必须跟踪一个位置和一个方向,并对每个位置应用不同的转换函数;这有点不方便,但实际上没什么大不了的。)
(顺便说一句,从数学上讲,用w增强的向量被称为齐次坐标,它们生活在一个称为投影空间的地方。但是,您不需要了解更高的数学即可制作3D图形。)
为了回答Natan的适当评论,我做了一些考虑,这些理解对于理解当您在仿射空间中使用向量来表示标准欧几里得空间中的3D向量时会发生的情况很有用。
首先,我将称向量为具有坐标的任何东西,因此点和向量是同一实体;您可以看到一个向量为两点之差:V = B - A ; V移动 甲在乙因为甲 + V = 甲 + 乙 - 甲 = 乙。设A = 0(原点),您将得到V = B - 0 = B:点B和移动0的向量到B是同一回事。
当仿射空间的向量的w = 0时,我将在大多数3D库中使用的意义上称为“向量”。
之所以使用矩阵,是因为它们使您能够以紧凑/优雅/高效的形式表示线性函数,但是线性函数的主要缺点是无法转换原点:如果F要线性,则F (0)= 0( AMOG其它事情,例如F(λ X)=λF(X)和F(甲 + 乙)= F(甲)+ F(乙))
这意味着您将无法构造进行转换的矩阵,因为您永远不会移动0向量。仿射空间在这里发挥作用。仿射空间为欧几里德空间增加了一个维度,因此可以通过缩放和旋转来进行平移。
从某种意义上说,仿射空间是一个射影空间,您可以在仿射向量和欧几里得向量之间构造等价关系,以便将它们混淆(就像我们对点和向量所做的那样)。所有以相同方向投射到原点的仿射向量都可以看作是相同的欧几里得向量。
这意味着所有在坐标中具有相同比例的矢量都可以视为等效的:
数学上:
也就是说,每个仿射向量都可以简化为w = 1的佳能版本(我们在每个等效向量中选择最喜欢的一个)。
视觉上(2D欧式-3D仿射):
因此,“射影”空间的均值;您应该注意到,这里的欧几里德空间是2D(青色区域)
存在一组特殊的仿射向量,它们不能(轻松地)置于(超)平面w = 0上的经典形式。
我们可以直观地显示它:
您(应该)看到的是,当w-> 0时,投影到欧几里得空间中的向量将到达无限大,但在特定方向上会到达无限大。
现在很明显,当您将和向量视为欧几里得空间中的投影向量时,将投影向量中的两个向量相加会导致问题,这是附加的,因为您将对仿射空间中的W分量求和,然后将它们投影到欧氏(超)平面。
这就是为什么您只能将“点”与“向量”求和的原因,因为“向量”不会更改“点”的w坐标,这仅对于w = 1的“点”才成立:
如您所见,绿点是将代表青色“点”和V“向量”的两个仿射向量相加而获得的,但是,如果将V应用于每个仿射向量,其典范与典范不同,则将获得错误的结果(红色的““ point”“)。
您将看到仿射空间不能透明地使用来形容欧氏空间操作和术语“载体”的滥用有计算和的(严格)约束下的意义只在佳能投影载体。
也就是说,除非您真的知道自己在做什么,否则认为GPU假设Vector4必须具有w = 0 或 w = 1 是很合理的。
假设一个向量如(x,y,z,w)。该向量具有4个分量x(空间中的x坐标),y(空间中的y坐标),z(空间中的z坐标)和有趣而神秘的w分量。实际上,大多数3d游戏都在4d空间中运行,也称为4d同质空间。它有一些明显的好处->
1>它可以帮助我们将平移和旋转矩阵合并为一个矩阵,但是您可能在想它的用途是什么,我们可以将平移和旋转矩阵相乘,仅此而已,但是如果没有我们所有向量中的w分量,然后以任何方式将3d向量(xyz)乘以平移和旋转的组合矩阵时,我们将不知不觉地用x,y或z缩放值(这就是矩阵乘法的工作方式),这将可能由于缩放而损坏了位置矩阵(组合矩阵的平移部分)。为解决此问题,引入了第4个分量向量,并且向量的w分量在99%的情况下将保持值为1.0。具有未缩放的位置值(平移)。矩阵表示为->
[x y z w] [rx1 rx2 rx3 1]
[ry1 ry2 ry3 1]
[rz1 rz2 rz3 1]
[px py pz 1]
然后我们有了简单而强大的矩阵。:)
2>我们在透视投影阶段将z值复制到w分量中,并用x,y进行除法。这样,对象从屏幕上移开时会变短。