Unity3D - Shader - 点和矢量

点和矢量

点(point):是n维空间中的一个位置,无大小、方向。

矢量 (vector):用于和标量区分开,矢量是n维空间中一种包含了大小(模 - magnitude)方向(direction)的有向线段。

  1. 矢量的模指的是这个矢量的长度(大小),其值是任意非负数。
  2. 矢量的方向则描述了在空间中的指向。

重要的:使用被用于表示相对于某个点的偏移(displacement),它实际上是一个相对量,只要适量的模(大小)和方向保持不变,无论在空间的哪里都是同一个矢量。

二维坐标系中:
X轴基矢量:(1, 0)
Y轴基矢量:(0, 1)

三维坐标系中:
X轴基矢量:(1, 0, 0)
Y轴基矢量:(0, 1, 0)
Z轴基矢量:(0, 0, 1)

若是把矢量的尾部固定在坐标系原点,那么这个矢量的表示就和点的表示重合了:

这里写图片描述

矢量运算

标量乘法

公式:

kv=(kvx,kvy,kvz)

几何意义是:
把矢量v和标量k相乘,意味着对矢量v进行一个大小为k的缩放.

矢量的加法和减法

两个矢量相加会得到相同维度的新矢量:

公式:

a+b=(ax+bx,ay+by,az+bz)ab=(axbx,ayby,azbz)

几何:
用于计算一点相对一另一点的位移。

矢量的模

矢量的模长是一个标量,是矢量在空间中的长度。

公式:

v⃗ =v21+v22++v2n

单位矢量

模为1的矢量就是单位矢量。

单位矢量也称作被归一化的矢量(normalized vector)

将任意非零矢量转化为单位矢量的过程就是归一化(normalizeation)

归一化公式:

v⃗ =v⃗ v⃗ 

零矢量:
每个分量都是0,且不可以被归一化。

矢量的点积

点积(dot product,也称为内积 inner product)

点积公式:

ab=(ax,ay,az)(bx,by,bz)=axbx+ayby+azbz

几何意义:
得到投影(projection)的长度。

若已知单位矢量 â  和另一个矢量 b⃗  ,那么 â b⃗  点积则可以得到矢量 b⃗  在单位矢量 â  的平行线段上的带有带有符号的投影的长度。

这里写图片描述

若矢量 a⃗  不是单位矢量,那么 a⃗ b⃗  点积的结果就是 b⃗  a⃗  方向上的投影值,再乘以 a⃗  的模长。

投影值可能为负数:

  1. a⃗  b⃗  的夹角大于90°,那么结果小于0.
  2. a⃗  b⃗  的夹角等于90°,那么结果等于0.
  3. a⃗  b⃗  的夹角小于90°,那么结果大于0.

这里写图片描述

矢量的叉积

叉积(cross product) 也称为外积(outer product),叉积的结果仍是矢量。

叉积得到的新矢量与原来两个矢量垂直。

叉积公式

a⃗ ×b⃗ =(ax,ay,az)×(bx,by,bz)=(aybzazby,azbxaxbz,axbyaybx)

新矢量的方向:
新矢量的方向由所在向量空间的方向确定,即按照给定直角坐标系的左右手定则