图形学中的矩阵是什么,为什么长得这么奇怪?

首先讲讲图形学为什么需要用到矩阵。
首先,图形学/渲染要做的事情,概括起来无非两点:变换上色
这里只说变换
一句话解释变换,就是一个模型,经过各种旋转、移动、扭曲、拉伸、缩放....后,还能“正确”的显示在屏幕上。
展开来说,变换包括:1模型变换、2视图变换、3投影变换、4视口变换。
1.模型变换:模型上的各个顶点,从局部坐标变成世界坐标;
2.观测变换:把摄像机规范到标准位置,同时模型也跟着摄像机一起转化,这里包含模型变换model+视图变换view,合起来叫观测变换viewing;
3.投影变换:我们想如何看这个模型,是以设计图的形式看(平行投影),还是以近大远小的形式看(透视投影);
4.视口变换:把经过投影变换后的点线面,映射到大大小小不同尺寸的屏幕上。

 

 

 


一句话,变换非常复杂。
那怎么办呢?
有人绝妙的想到,变换归根结底,不就是拿着模型在空间扭一扭,转一转吗?
空间,我们可以用直角坐标系表示呀!
扭一扭、转一转,我们可以用平移、缩放、旋转的组合表示呀!
于是,变换的问题,成功的换成,如何在3维直角坐标系(xyz)中平移、缩放、旋转的问题。
换句话说,变换就是如何调整xyz的值,使图像达到平移、缩放、旋转的效果。

这有几张图,看看平移、缩放、旋转在直角坐标系上,xyz值到底是怎样改变的(以2维xy值为例)。

 

 

 

 

平移后的点可以表示为

x` = x+tx
y` = x+ty

旋转后的点可以表示为
x` = cosθx - sinθy
y` = sinθx + cosθy
缩放后的点可以表示为
x` = sx
y` = xy

 

我们惊讶的发现,改变后的点x`y`,总是可以用原来的xy和一些常量(t、θ)组合来表示。
于是我们把这些常量(t、θ)抽离出来,形成一个数字组合,以便让所有的点xy,跟这个数字组合结合以后,都能变换成新的点。
这个数字组合就是矩阵
回答最开始的问题,为什么需要矩阵?因为
1.模型可以拆分成点,点可以做变换;
2.变换很复杂,我们转换为在直角坐标中平移、缩放、旋转,就比较容易;
3.我们可以用一个数字组合,就可以表示所有的平移、缩放、旋转。
也就是说,用矩阵,是最简单有效的变换方式。


 

说完了图形学为什么需要矩阵,我们再来说说,为什么矩阵长得这么奇怪?
这个数字组合,有个高深的名字,叫做行列式,搞得好像古代的兵阵,实在让人看不懂。
并且,矩阵乘矩阵,确实非常难以理解,行和列的元素交叉相乘再相加,它所表示的意义何在?
解释起来可能有点哲学,我从两个方面来阐述。
的层面,只因为人是的,期望一劳永逸。举个例子,你看到一部手提电脑或手机,会惊叹它为何如何小巧而功能强大,拆开后发现是因为芯片做得非常复杂。
里面做的复杂了,外面看起来就简介了。
其实,芯片完全可以做得非常大,大得像一个屋子,一眼就能看到内部的所有零件(早期计算机就是如此)。
同理,数字组合,可以写得非常长,长得一眼就能看懂所有的计算过程。
但是人说了,不要!我人类是追求简洁的,我要把平移/旋转/缩放看起来不同的表示方法,合成一个表示方法!
于是矩阵这种方方正正的形式就诞生了,虽然很复杂,但功能很强大,而且看起来挺简洁。
的层面,我们看在二维上旋转的表示方法,发现x在变换后,不仅跟x有关系,还跟y有关系;在三维中,x的值变换后,不仅跟x有关系,还跟y、z有关系。
如何才能做到?只需要一种这样的表示形式:

 

让数字组合的每一行,都跟右边的x、y、z分别乘一遍,不就都有关系了么?

现在可以回答,矩阵乘法为什么是“行和列的元素交叉相乘再相加”?归根到底是因为人是“懒”的,需要一种看起来一致的简洁形式,于是造出了行列式。
因此,本质上,它不应该被称为“乘法”,更应该被称为“矩阵变换法”。
它除了具有乘法的交换律,好像跟乘法没太多关系。矩阵乘法实际上是乘法、加法和三角函数组合而成的复合运算。

实际上,我们觉得直观的东西,基本是一些不证自明的、大自然中能观察到的东西。
而矩阵它...

也许这就是为什么矩阵及其乘法看起来这么奇怪的原因。

 

posted @ 2022-04-04 16:27  银龙背上的骑士  阅读(880)  评论(0编辑  收藏  举报