百人计划学习 图形 1.2.1 向量基础
这是个人学习笔记,有错欢迎指出
基本定义
向量:有大小有方向的有向线段
没有位置,只有大小和方向
箭头是向量的结束,尾是向量的开始
表示:三维(ax,ay,az) 二维(ax,ay)
- 向量和标量的区别:
向量:有大小和方向的有向线段
标量:只有大小,没有方向的量
- 点:
点:有位置,没有实际的大小和方向
向量:无位置,有实际的大小和方向
注意:可以将点看做是从原点出发的向量
- 零向量:
唯一大小为零的向量,唯一一个没有方向的量,不是一个点
表示的是没有位移
- 标准化向量:
单位向量,大小为1的向量,仅需知道方向而不关心其大小如法线
运算法则:将向量除以它的大小
标准向量 ( − 12 , 5 ) = ( − 12 / 13 , 5 / 13 ) (-12,5) =(-12/13,5/13) (−12,5)=(−12/13,5/13)
计算
几何解释:向量乘以标量的效果是以标量的大小缩放向量的长度,负值则方向相反
向量的模长:勾股定理: ( − 12 , 5 ) = ( − 12 ) 2 + 5 2 = 13 (-12,5) =\sqrt{(-12)^2 + 5^2} = 13 (−12,5)=(−12)2+52=13
距离公式
l e n ( a , b ) = ( a x − b x ) 2 + ( a y − b y ) 2 len(a,b) = \sqrt{(ax-bx)^2 + (ay-by)^2} len(a,b)=(ax−bx)2+(ay−by)2
点积
·几何解释:点乘结果描述了两个向量的“相似”程度,点乘结果越大,夹角角度越小,两个向量越接近。
计算公式 a ⋅ b = a x ∗ b x + a y ∗ b y a\cdot b =a_{x}*b_{x} +a_{y}*b_{y} a⋅b=ax∗bx+ay∗by
点积满足交换律
a ⋅ b = ∣ a ∣ ∣ b ∣ c o s θ a\cdot b =|a||b|cos\theta a⋅b=∣a∣∣b∣cosθ
投影的解释
这部分不好理解,直接按高中所学理解即可
叉积
仅用于3D向量,不满足交换律,满足逆交换律
左手坐标系判断方向
兰伯特光照模型
使用shader graph实现
作业
使用shader graph实现兰伯特效果和半兰伯特效果
实现步骤
1.在场景中创建两个球体,创建如下材质
2.Lambert连连看
- 创建custom funtion,获取Main Light,与vector1(-1)相乘得到光源反方向
- 创建normal vector,获取物体表面的法向量,negate归一化
- 上述得到的结果,进行点积,再clamp得到0-1之间的值
半兰伯特
将兰伯特点积后的结果*0.5+0.5即可