羽毛先生
2022/12/05阅读:27主题:全栈蓝
现代计算机图形学-L2 ——线性代数
一、图形学依赖学科

二、 线性代数
1 向量 vectors

-
如图向量AB表示A指向B的方向,「B的坐标」减去「A的坐标」得到向量AB -
向量表示方向和长度 -
向量没有绝对的开始位置,无论如何移动,仍然是同一个向量。
单位向量
-
向量的长度 -
单位向量 -
单位向量是一个和原始向量同方向但长度为1的向量。 -
图形学中我们谈起向量更多的认为其是单位向量,我们只关心方向而不关心长度。
1.2向量的基本操作
加法

-
几何表示:平行四边形与三角形法则 -
代数表示:坐标相加
点乘 Dot product
「点乘的结果是一个数」
-
定义:两个向量的点乘等于两个向量「长度乘积」,再乘以两个向量的「夹角余弦」
-
直角坐标系下,运算更加简单,「坐标分别乘积后相加」:
-
-
性质:满足交换律、结合律、分配律
-
作用:
-
常常用来求两个向量的「夹角」,尤其当两个向量为单位向量时,分母自然为1,只需要求两向量的点乘即可。
-
求一个向量到另一个向量的「投影」
算出投影后,可以将向量沿两个方向分解(三角形或平行四边形法则)
-
-
点乘在图形学中的应用
-
计算两个向量有多接近,计算出两个向量点乘的结果根据结果判断距离近与远。 -
a与b点乘结果接近1。 -
b继续旋转到虚线上,点乘结果0 -
b继续旋转与b相反方向,点乘结果-1 -
图形学应用:当光打到物体表面时,镜面反射定律:观测角度与镜面反射角度不同,金属高光计算
-
-
两个向量前与后的关系 -
当a和b同在虚线上半部分时,点乘的结果是正数,说明方向基本同向。 -
当a和c分别在虚线两部分时,点乘的结果是负数,说明方向基本相反。 -
当点乘结果为0时,则终点代表在虚线上。
-
叉乘
1、定义:输入两个向量a、b,输出向量c,要求c与a、b垂直,c的方向遵循右手螺旋定则(a旋转到b),c的大小如图。向量叉积不满足交换律。 作用:建立三维空间的直角坐标系
2、 性质 不满足交换律,满足分配律和结合律 「向量a叉乘自己,得到的是长度为0的向量,结果为一个向量」
3、代数表示 后续课程还将介绍矩阵表示方式:

4、作用
-
判断左右
-
bxa,得到的结果「z为负数」,则b在a的「左边」 -
axb,得到的结果「z为整数」,则a在b的「右边」
-
-
判断内外
-
判断P在三角形的内部还是外部?
-
1、AB X AP,得到的结果向屏幕外,z>0——>P在B的左侧
-
2、BC X BP,得到的结果向屏幕外,z>0——>P在C的左侧
-
3、CA X CP,,得到的结果向屏幕外,z>0——>P在A的左侧
-
「都在左侧」,因此P点在三角形「内部」
-
「总结:对于任何绕向的三角形,P都在左边或者都在右边,则P在三角形内部」 图形学应用:光栅化基础,判断三角形覆盖了哪些像素——>判断像素是否在三角形内部,
-
3.正交坐标系

矩阵
定义:
矩阵就是一堆数,按照如图结构排列,如图3x2(三行两列)
矩阵相乘
MXN 与NXP矩阵才能相乘(「N相同,即第一个矩阵的列数必须等于第二个矩阵的行数」),从而得到一个 M X P 的矩阵
结果矩阵中的每个元素如何求?
-
「总结:想要算第m行第n列,就去第一个矩阵找m行,第二个矩阵找n列,然后进行点乘。」 -
例子:以第1行第4列的13为例,从第一个矩阵中找第1行(1,3),第二个矩阵中找第4列(4,3),进行点乘,1 * 4 + 3 * 3 = 13
矩阵乘积的性质
-
「不满足交换律」 -
满足结合律,可应用于多矩阵变换精简计算与存储。 -
满足分配律
矩阵与向量相乘
「变换(Transform)的关键」
-
通常向量作为列向量(M X 1的矩阵) -
矩阵放在左边(*xM),列向量(M X 1)放在右边进行相乘。 -
example
矩阵转置
定义:行列互换 性质:
单位矩阵
-
单位矩阵:对角阵,基本不做任何操作。
-
逆矩阵:如果两个矩阵相乘的结果为单位矩阵,那么这两个矩阵互逆。
-
性质(与矩阵的转置类似)
向量乘积的矩阵形式
-
向量点乘 -
向量叉乘

小结:
本节课程主要是对线性代数进行重温,介绍了
-
向量定义,向量的加法、叉乘、点乘、叉乘与点乘在图形学中的应用。点乘可应用于计算夹角与投影,叉乘可应用于判断点是否在三角形内部、向量的左右关系以及构建正交坐标系, -
矩阵相乘、矩阵与向量相乘,矩阵的转置、矩阵的逆、单位矩阵,这是应用学习变换(Transform)的前奏,后续将引入齐次坐标。
更多
CocosCreator3.4.2原生二次开发的正确姿势——手把手教你接SDK
关于作者
我是羽毛,一名游戏研发工程师,一名野生摄影同学。我的公众号主要分享自己的一些游戏项目开发过程中的功能总结及日常开发笔记。也希望能通过平台的交流,与更多有想法的同学交流认识,共同成长。
欢迎大家在日常开发过程中,如果觉得有需要讨论解决、分享或者探讨的内容,在公众号后台或者文章留言处给我反馈,提供写作的方向,从另一个角度也尽量让写作内容更贴近大家的需求以及痛点,在此谢谢各位同学.
另外羽毛也提供付费技术咨询的服务,有需求的同学可以公众号后台私信添加微信。

今日技能你学废了吗?
更多精彩欢迎关注微信公众号


作者介绍