编辑代码




unity3d默认使用左手坐标系
----------------------------
标量:只有大小的量

向量:即有大小,又有方法的量,比如向量(2,1)方向从0,0, 到2,1   大小也是从0,0 到2.1
              平移不会改变向量的大小和方向,所以他们两个是相等的,也就是向量可以任意平移
              把向量AB平移到原点,变成向量OP,因为没有改变大小和方向,所以二者是相等的
              这时就可以通过点p表示一个向量,当前通过点表示的向量起点在原点
              这就是从坐标原点出发的向量OP就是(x-0,y-0,z-0),就是点p(X,Y,Z),其中X是向量到x轴的距离,y是向量到y轴的距离,z是向量到z轴的距离  

向量的模:向量的大小,也叫向量的长度

单位向量: 大小或者长度为1的向量

向量的单位化。向量的归一化,就是把向量转化为单位向量的过程

---------------------
向量的运算:

 向量A(1,2) 向量B(2,1) 

 加法: 向量组成的平行四边形的对角线
 A(x1,y1) + B(x2,y2) = x1+ x2, y1+y2 A(1,2)+ B(2,1) = C(3,3)

 减法:三角形的第三边a-b就是从A到B,就是向量的距离
A(x1,y1) - B(x2,y2) = x1- x2, y1-y2 A(1,2)+ B(2,1) = C(-1,1)

乘法:向量与标量相乘,也叫数乘: 就是向量的加长 A(x1,y1)*2 = x1*2, y1*2  
----------------------------------------
叉积:计算结果依然是一个向量,只有3D向量有叉积,结果第三个向量W是同时垂直于V和u的,也就是说w重置与v和u组成的平面,所有叉积是用于计算法线的
  叉积计算公式
     u= (x,y,z) V = (vx,vy,vz)
    u *V = (y *vz -z * vy, u *vx - x*vz, x*vy-y-vx)
     法线: 垂直于一个平面的向量
--------------------------

点乘(点积):得到的是一个标量(一个数值,一个结果),用于计算两个向量之间的夹角,相关的定义时光照模拟
 u= (x,y,z) V = (vx,vy,vz)
A*b = x * vx +y * vy + z*vz = n
余弦定理:
 u*v= |a| * |b| * cos&
 coS&是两个向量指间的夹角,是两个向量指间最小的夹角, 大于0 小于π。而且两个向量要求公用一个起点
因为向量的长度与夹角无关,所有都是把向量转化为单位向量然后计算夹角
 |a|是u向量的长度,也叫A向量的模

如果u,v都转化为单位向量。公式就变成 u*v = cos& = -1 < coS& <1  
-1到0之间是从背面照射的,根本照射不到,

u*v = 1 即cos& = 1.所以u与v是平行
u*v = 0 即cos& = 0.所以u与v是垂直
u*v >0 u与v夹角小于90度
u*v <0 u与v的夹角大于90度

当光线和平面垂直时,就是光线平行于法线,关照强度最大。余弦定理的值最大且为1
当光线和平面平行是,就是光线垂直于法线,关照强度最小,徐玄定理的值为0
所以可以使用余弦定理表示光线强度
 用一个向量表示光照的颜色,最后可以知道
 平面的光照颜色 = 光照的颜色 * cos&

--------------------------------------
 Vector3:一个结构体,x,y,z 
      vector3是可以代表一个三维向量,或者坐标,或者旋转 或者缩放
     常用方法
     夹角 Vector3.Angle(v1,v2)
      距离 Vector3.Distance(v1,v2)
     点乘 Vector3.Dot(v1,v2)
     叉积 Vector3.Cross(v1,v2)
     插值 Vector3.Lerp(v1,v2,0.4f)
      v1.magbitude
    规范会向量,就是单位向量 v1.normalized
    
------------------------------------------------

 转置矩阵,就是矩阵的行列互换矩阵A的转置矩阵表示为AT

unity3d使用4*4矩阵来描述变换操作,因为一点点vector3(x,y,z)即可以表示一个向量也可以表示一个点,但进行平移操作是,
平移后的方向是不变的,如果是3*3 就不行、所以增加了一个维度W编程4维矩阵【X,Y,Z,W】

单位矩阵,指矩阵中从左上角到右下角的对角线上的元素全是1.除此之外全是0
任何矩阵与单位矩阵相乘结果等于自身

A【x,y,z,w】 *【 1 0 0 0  = 【1*x+ 0*y+ 0*z+ w*0, 0*x+ 1*y+ 0*z+ w*0,0*x+ 0*y+ 1*z+ w*0,0*x+ 0*y+ 0*z+ w*=[x,y,z,w]
                0 1 0 0
                0 0 1 0
                0 0 0 1


点A[X,Y,Z] 平移向量B[TX,TY,TZ]后的结果应该是AB【x+TX ,Y+ TY, Z+TZ】

向量AB的表示应该是【 1  0  0  0
                   0  1  0  0
                   0  0  1  0
                   tx ty tz W】
(X,Y,Z,0)用于描述向量 w= 0 是平移后结果不变,满足向量的定义,所w = 0 表示向量
(X,Y,Z.1)用于描述点 w = 1满足点平移的定义 所以w = 1表示点

在unity中输出对应点的矩阵
Debug.Log(transform.localToWorldMatrix)OPenGL输出
Debug.Log(transform.localToWorldMatrix.transpose) 转换一下,就是正常矩阵输出
 








矩阵 加法/减法: 
相加/相减的两个矩阵必须具有相同的列数和行数
两个矩阵的相加/相减就是相同位置的元素进行加/减

矩阵乘法:
 相乘的矩阵条件是第一个矩阵的列数等于第二个矩阵的行数
 乘法规则:
 第一个矩阵的对应行与第二个矩阵的对应列的乘机只和
 结果是一个第一个矩阵的行数,第二个矩阵的列数的新矩阵