ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Unity shader入门精要笔记(三)

2021-08-05 02:02:40  阅读:267  来源: 互联网

标签:1.1 矢量 shader Unity 坐标 标量 精要 坐标系


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的过程,而拇指为

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

标签:1.1,矢量,shader,Unity,坐标,标量,精要,坐标系
来源: https://www.cnblogs.com/tingqiaoqiao/p/15101468.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有