Java教程

Unity shader入门精要笔记(三)

本文主要是介绍Unity shader入门精要笔记(三),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

1.1.1   二维笛卡尔坐标

二维笛卡尔坐标系由x、y轴组成,坐标系的中心为原点(0,0)。

OpenGL与DirectX所用的坐标系起点不同,OpenGL原点在左下角,y轴向上,x轴向右;而DerectX则原点在右下角,y轴向下,x轴向右。

1.1.2   三维笛卡尔坐标

三维笛卡尔坐标系由x、y轴组成,坐标系的中心为原点(0,0,0)。

该三个坐标轴亦被称为坐标系的基矢量。三个坐标轴之间是互相垂直,且长度为1,则被称为标准正交基。而若三个坐标轴之间互相垂直,但长度不为1,则被称为正交基。

而三维坐标轴的坐标方向并不固定,因此分为左手坐标系与右手坐标系。值得一提的是,对于模型空间与世界空间,Unity中所用的为左手坐标系。

而三维坐标之所以要分为左右手坐标系而二维不用,正是因为二维坐标可以通过旋转折叠等方法进行坐标系等价,而三维坐标并不都是等价的,旋转有时并不能使两个不同朝向的坐标系进行重合叠加,如左右手坐标系。

在左手坐标系中,旋转正方形是顺时针;在右手坐标系中,旋转正方形是逆时针。

对于同一次运动,利用不同坐标系进行描述,所用的数学表达式是不一样的。

1.1.3   Unity使用的坐标系

前文提及对于模型空间与世界空间,Unity所使用的坐标系是左手坐标系,在模型空间中,物体的右侧(right)对应x轴,上侧(up)对应y轴,前侧(forward)对应z轴。但对于观察空间来说,Unity所对应的则是右手坐标系,即以摄像机为原点的坐标系。而以摄像机看来,我们所认为的z的负方向实则为为摄像机的正方向,这与模型空间和世界空间中的定义是相反的。随着世界坐标的z轴坐标的减少,即以摄像机的z轴增加,则意味着场景深度的增加。

1.1.4   点和矢量

点是一个位置,可用坐标表示。二维可用(x,y);三维可用(x,y,z)表示。

矢量(也可称为向量),它指的是n维空间中一种包含了模和方向的有向线段。而标量与之不同,标量没方向,仅有距离。

矢量通常用于表示偏移量,它通常用a=(x,y,z)来表示,但与点不同,其(x,y,z)表示的不是坐标值,两点确认一条直线,其x、y、z表示的是头尾两个点的坐标值差的值。(若想再深入了解可重温线性代数)

1.1.5   矢量运算

[1]矢量可以与一个标量进行相乘与相处,所得到的是一个矢量,若两个矢量相乘则得到一个标量(后面再提及,本次提及的是向量与标量相乘),其公式如下:

相乘:v=(x,y,z)                  相除:v=(x,y,z)

kv=(kx,ky,kz)                 (k≠0) 

[2]矢量不可以与标量相加减,只能与矢量相加减,其公式如下:

相加:a=(x1,y1,z1)  b=(x2,y2,x3)         相减:a=(x1,y1,z1)  b=(x2,y2,x3)

c=(x1+x2, y1+y2, z1+z2)                 c=(x1-x2, y1-y2, z1-z2)  

 

[3]矢量的模

矢量的模是一个标量,若v =(a,b,c),其计算公式如下:

  

[4]单位矢量

单位矢量指模为1的矢量,在这种情况下,人们只需要关心矢量的方向而不用关心它的长度。其公式如下:

其中v是任意非零矢量,而零矢量(即矢量每个分量值都为0,如v=(0,0,0)),不可以被归一化。

而在后面章节中将会不断遇到法线方向(即法矢量)、光源方向等,这些矢量不一定是归一化后的矢量,而我们所计算的往往要求矢量是单位矢量,从而在使用之前需要对这些矢量进行归一化。(而更多时候如UV贴图等,其坐标轴的范围为(0,1),从而归一化十分重要)

 

[5]矢量的点积

上文笔记提及到矢量与标量可以相乘,而本点所提及的是矢量与矢量之间的乘法。矢量的乘法有两种最为常用的种类:点积与叉积。

其公式一为:

 

 其公式二为:

 

而在编写shader的过程中,通常程序接口都会提供这些公式的实现,从而往往开发者不需要手工输入这些公式,如在Unity shader中,开发者可直接使用形如dot(a,b)的代码来对两个矢量值进行点击的运算。

点积运用在图形学各个方面,其中一个几何意义就是计算投影。

[5]矢量的叉积

!叉积不符合交换律,不可以交换,也不符合结合律 

 

利用左右手坐标系,四指旋转方向为a转向b的过程,而拇指为

叉积的作用可以帮助使用者就算垂直于一个面、三角形的矢量以及判断三角面向的朝向等应用。

这篇关于Unity shader入门精要笔记(三)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!