前言:
博客是本小白对Games101这门课程的学习笔记,也是本小白对课程内容的一个小小的总结,欢迎各位大佬一起讨论,如果有不准确的地方也欢迎各位大佬指出。
1、向量
定义:通常用来表示带有方向的量(物理学中常常成为 矢量)
属性:方向和长度
1.1 单位向量
单位向量实际上就是指长度为1,单纯的表示方向的向量。
值得注意的是:实际上来说向量是没有绝对的起点的,将一个向量进行 任意的平移,那么平移后的向量都是相等的。
1.2向量的表示
向量除了使用在笛卡尔坐标系下的正常(x,y,z)的表示方法外,还可以使用矩阵的方式进行表示,其主要作用实际上运算,对向量的运算可以换成对矩阵的运算,当然,就我个人而言,这对后面学习齐次坐标系来对某个物体做仿射变换来说也是极其重要的。
一般来说使用的是列矩阵来表示一个向量。
2、向量的运算
2.1、向量的加法
向量的加法实际上可以用作两个法则:平行四边形和三角形法则。
平行四边形:两个向量起点对齐,对角线就是向量相加的结果
三角形法则:一个向量的终点是另一个向量的起点,最后首尾相连,就是向量相加的结果
(关于三角形法则值得注意的是:无论多少个向量相加或者相减,都可以使用这个法则进行一次性的计算)
2.2、向量的点乘
作用:
由上图公示就可以得到向量的点乘的主要作用就在于可以得到两个向量的夹角的角度。
实际应用:
1、可以得到投影:
2、可以通过夹角得出某个点是在前或后
3、运用在图形学的作用实际上就是在于光照的计算,举个很简单的例子,我们在unity编辑器下写出通过光照模型shader光栅化后的模型会存在高光,那么高光的得出的原理既是,视角是不是在高光的反射范围之内,而反射范围即可抽象成夹角的形式。
使用矩阵的方式表达点乘:![](https://img-blog.csdnimg.cn/direct/36b753bcba524c1f8c57a6d11adc9526.png)
2.3、向量的叉乘
作用:
由上图可知,矩阵的叉乘主要可以用来算出垂直于该两个向量组成的平面的向量,换句话来说,得到的向量垂直于这两个向量
实际应用:
这里主要表现了两个应用,通过叉乘就可以得到向量b在向量a的左边还是右边(使用的是右手螺旋定律),当然如果知道了左边还是右边也可以得出,某个点是否在某个三角形内。
那么如果能够得知某个点是否在某个三角形内,我们结合unity的渲染流程的光栅化阶段,判断这个点是不是在三角形图元内,从而可以得出该点是不是需要着色。(个人理解:其实这个也可以应用在平面的裁剪过程,视野范围外的点全部进行裁剪)
使用矩阵的方式表达叉乘:
2.4、通过点乘和叉乘可以得到坐标系
原理如下图:
3、矩阵
3.1矩阵的定义:
3.2矩阵的基本运算:
这里强调矩阵的乘法:
那么矩阵的乘法作用呢?
这里举几个简单的例子:
1、在unity中对某个物体进行旋转、平移等等仿射变换都是通过左边乘以旋转矩阵或者是平移矩阵来实现的。
2、在unity的渲染流程中,从模型空间到裁剪空间这一部分需要经过mvp矩阵来进行变换。
4、总结
这是games101的第一节课,主要是讲了一些基本且简单的运算,这里也只是对本小白空缺的部分进行了一些补充,第一节课也涉及到了例如矩阵的逆和单位矩阵以及矩阵的加法等等。如果有不足的地方,请各位大佬一起讨论。