为什么在计算机图形学中使用同质坐标?

如果在矩阵转换中不使用同质坐标会出现什么问题?

评论

Gamedev.SE上存在一个非常相似的问题:图形卡将向量的第四个元素作为最终位置是做什么的?

#1 楼

它们简化并统一了图形中使用的数学:


它们允许您用矩阵表示平移。
它们允许您表示透视投影中的深度除法。
/>
第一个与仿射几何有关。
第二个与射影几何有关。

评论


$ \ begingroup $
您在寻找什么样的例子?翻译矩阵和与透视投影相关的任何事物都应该足够容易查找?
$ \ endgroup $
–巴特
2015年9月25日15:07

$ \ begingroup $
@Bart,需要类比。
$ \ endgroup $
–user464
2015年9月25日15:20



$ \ begingroup $
对不起,@匿名,但这并不能告诉我任何事情。您将不得不使用更多的单词来解释您到底在寻找什么。
$ \ endgroup $
–巴特
2015年9月25日15:21

$ \ begingroup $
我认为这个答案没有被高度推荐,因为它对我们新手来说太技术性了。也许一个简单的措辞简单的例子可以更好地说明原理
$ \ endgroup $
–内森(Nathan)
19 Mar 26 '19在19:20

#2 楼

它的名字是:均质坐标...均质。
均质表示旋转,平移,缩放和其他变换的统一表示。

统一表示允许优化。 3D图形硬件可以专门用于在4x4矩阵上执行矩阵乘法。甚至可以专门识别和保存乘以0或1的乘法,因为它们经常被使用。

不使用齐次坐标可能很难充分利用高度优化的硬件。无论哪种程序都认识到,可以使用硬件的优化指令(通常是编译器,但有时情况会更复杂)来实现同类坐标,而很难优化其他表示形式。它将选择优化程度较低的指令,从而不利用硬件的潜力。

由于有一些示例,例如:
索尼的PS4可以执行大规模矩阵乘法。它的优点是如此之大,以至于售罄了一段时间,因为它们使用了群集而不是更昂贵的超级计算机。索尼随后要求不得将其硬件用于军事目的。是的,超级计算机是军事装备。

即使没有图形,研究人员也很普遍使用图形卡来计算其矩阵乘法。仅仅是因为它们在性能上要比通用CPU更好。
为了进行比较,现代多核CPU的数量级大约为16个流水线(x0.5或x2无关紧要),而GPU的数量级则最大。共有1024个管道。

与其说是核心,不如说是允许实际并行处理的管道。核心在线程上工作。必须对线程进行显式编程。管道在指令级别上工作。该芯片可以自己或多或少地并行化指令。

评论


$ \ begingroup $
“索尼的PS4可以执行大规模矩阵乘法。”您是说PS3的Cell处理器,对不对? PS4具有相当普通的x86处理器。
$ \ endgroup $
– Wumpf
15年9月28日在20:40

$ \ begingroup $
虽然这是一个很好的答案,但我认为它不能回答OP的问题,并且有点建议使用同构坐标,因为它是针对硬件进行了优化的,同构坐标更有用,并且最终围绕此开发了硬件。 vec4的另一个论点是它们是128位对齐的,这使得在宽内存总线(GPU)上读取效率更高
$ \ endgroup $
–PaulHK
16年8月29日在1:53

#3 楼

补数:

均匀坐标还可以表示无穷大:$(x,y,z,0)= \ frac {x,y,z} 0 $在3D中,即在无穷大处的点方向$ x,y,z $。通常,可以用相同的方式表示在有限或无限位置上的光源。

关于透视变换,它甚至可以正确插值而没有透视失真(与PC上的早期图形硬件相反)。 />

#4 楼

假设您要使用矩阵表示转换。点可以存储为$$ \ begin {bmatrix} x \\ y \ end {bmatrix} $$,并且您可以将旋转表示为$$ \ begin {bmatrix} u \\ v \ end {bmatrix} = \ begin { bmatrix} cos(\ theta)&-sin(\ theta)\\ sin(\ theta)&cos(\ theta)\ end {bmatrix} \ begin {bmatrix} x \\ y \ end {bmatrix} $$并缩放为$$ \ begin {bmatrix} u \\ v \ end {bmatrix} = \ begin {bmatrix} k1&0 \\ 0&k2 \ end {bmatrix} \ begin {bmatrix} x \\ y \ end {bmatrix} $$作为线性变换,它们使我们能够将变换做为矩阵乘法。但是请注意,您不能将转换作为矩阵乘法进行。相反,您必须执行$$ \ begin {bmatrix} u \\ v \ end {bmatrix} = \ begin {bmatrix} x \\ y \ end {bmatrix} + \ begin {bmatrix} s \\ t \ end {bmatrix } $$这称为仿射变换。但是,这在计算方面是不希望的。

让R和S为旋转和缩放矩阵,T为平移矢量。在计算机图形学中,您可能需要进行一系列翻译。您可以想象这会变得多么棘手。

缩放,平移,旋转和缩放,然后再次平移:$$ p'= SR(Sp + T)+ T $$
不太糟糕了,但想象一下您已经在一百万点上进行了此计算。我们想要将旋转,缩放和平移都表示为矩阵乘法。然后,可以将这些矩阵预乘在一起,形成易于转换的单个转换矩阵。

缩放,平移,旋转和缩放,然后再次平移:
$$ M = TSRTS $$ $$ p'= Mp $$

我们可以通过向我们的点添加另一个坐标来实现这一点。我将针对2D图形(3D点)展示所有这些内容,但是您可以将所有这些扩展到3D图形(4D点)。
$$ p = \ begin {bmatrix} x \\ y \\ 1 \ end {bmatrix} $$
旋转矩阵:
$$ R = \ begin {bmatrix} cos(\ theta)&-sin(\ theta)&0 \\ sin(\ theta)&cos(\ theta )&0 \\ 0&0&0&1 \ end {bmatrix} $$
比例矩阵:
$$ S = \ begin {bmatrix} k1&0&0 \\ 0&k2&0 \\ 0&0&1 \ end {bmatrix} $$
翻译矩阵:
$$ T = \ begin {bmatrix} 1&0&t1 \\ 0&1&t2 \\ 0&0&1 \ end {bmatrix} $$
您应该算出一些例子,以使自己相信这些实际上可以为您提供所需的变换,并且可以通过将多个矩阵相乘来组成一系列变换。

您可以走得更远,让额外的坐标取任何值。 $$ p = \ begin {bmatrix} x \\ y \\ w \ end {bmatrix} $$,并说这个齐次(x,y,w)坐标表示(x / w ,y / w)。通常,您不能使用矩阵变换进行除法,但是通过允许w为除数,可以将w设置为某个值(通过矩阵乘法),并允许它表示除法。这对于进行投影很有用,因为(在3D中)您需要将x和y坐标除以-z(在右手坐标系中)。您可以使用以下投影矩阵将w设置为-z来实现此目的:
$$ Q = \ begin {bmatrix} 1&0&0&0 \\ 0&1&0&0 \\ 0&0&1&0 \\ 0&0&-1&0 \ end {bmatrix} $$

#5 楼

作为个人喜好,我总是在可能的情况下不使用齐次坐标,而倾向于使用简单的笛卡尔公式。

主要原因是这样的事实,即齐次坐标在变换矩阵中使用4个平凡的项(0, 0、0、1),涉及无用的存储和计算(也是这种情况下使用的默认情况下通用矩阵计算例程的开销)。

缺点是您需要更多在写方程式时会很在意,并失去了对矩阵理论的支持,但到目前为止,我还幸免于难。

评论


$ \ begingroup $
原则上,即使数据类型的行为与数据类型一样,也可以实现为实际上不存储这些数据类型的数据类型。
$ \ endgroup $
–user1713
2015年9月25日上午8:06

$ \ begingroup $
@Hurkyl显然。由于通用矩阵工具箱在手,因此很少这样做。
$ \ endgroup $
–伊夫·达乌斯特(Yves Daoust)
2015年9月25日在8:09



$ \ begingroup $
@YvesDaoust您能否提供一个简单的笛卡尔公式化示例,或链接到描述其在3D图形中用途的资源?
$ \ endgroup $
–丹
17/12/27在23:41

$ \ begingroup $
@Dan:使用y = A.x + b,其中A是3x3矩阵,b是3x1向量,而不是y'= A.x',其中y',x'是扩充向量,而A是4x4矩阵。
$ \ endgroup $
–伊夫·达乌斯特(Yves Daoust)
17年12月28日在8:45

$ \ begingroup $
@YvesDaoust那么,您要将3x3矩阵和3x1向量传递给着色器,而不是4x4矩阵吗?您在哪里计算和存储w?
$ \ endgroup $
–丹
17/12/28在18:51



#6 楼

仿射坐标的计算通常需要除法,与加法或乘法相比,除法成本很高。使用投影坐标时,通常不需要进行除法。

使用投影坐标(更常见的是,投影几何)也趋向于消除特殊情况,从而使一切更简单,更统一。

评论


$ \ begingroup $
“仿射坐标的计算通常需要除法”:我不知道为什么。实际上,您计算的表达式完全相同。
$ \ endgroup $
–伊夫·达乌斯特(Yves Daoust)
2015年9月25日在7:07

$ \ begingroup $
@Yves:我要回答的是更笼统的“用于计算机图形学”主题,而不是特定的“计算矩阵转换”问题。
$ \ endgroup $
–user1713
2015年9月25日在7:54

$ \ begingroup $
@Hurkyl:我也是。在渲染场景时,您将计算出完全相同的表达式,并且具有相同的除法数量(不同之处在于虚拟因子为0的虚假项)。
$ \ endgroup $
–伊夫·达乌斯特(Yves Daoust)
2015年9月25日在8:02



$ \ begingroup $
@Yves:嗯。我习惯于进行计算,在某种程度上可以推迟回仿射的转换。如果您说不经常出现,我会请您帮忙。
$ \ endgroup $
–user1713
2015年9月25日在8:05



#7 楼





简单的公式
更少的特殊情况
统一和
对偶


评论


$ \ begingroup $
答案还不清楚。您应该详细说明每一点。
$ \ endgroup $
– Rottem
17年12月25日在6:14