Unity中的计算机图形学(九)----SurfaceShader中顶点着色器和片段着色器的联系方式

SurfaceShader中顶点着色器和片段着色器的联系方式是通过参数的传递和运算联系在一起的。

着色器之间参数的传递

struct Input 结构体当中

uv+_+纹理变量名字


自定义:由于顶点着色器和片段着色器的运算次数不是一个量级的,所以能放在顶点的就尽量放在顶点。

对于struct Input这个结构体我们是需要进行进一步操作的。目前,surf着色器入口函数当中的参数有两部分组成,一个是Input结构体一个是SurfaceOutput结构体,我们可以进行规整以下。我们可以直接把Input结构体在顶点着色器中进行初始化。主要是借助unity中内置的宏UNITY_INITIALIZE_OUTPUT(type,name)

UNITY_INITIALIZE_OUTPUT(type,name)

type:是struct的名字

Name:以这个结构体为类型的变量的名字(Input  o等)

具体操作如下:



向量的运算

向量的运算用的比较多的就是向量的点乘和叉乘。点乘求角,叉乘求法线,这个我们都知道。


A.B = |A|*|B|*cos(q)

1、假如A向量为单位向量  |A|==1, A.B = |B|*cos(q)

A.B就等于向量B在A向量上的投影

2、假如两个向量A和B都为单位向量 |A|==|B|==1 

A.B = cos(q)

求角:acos(cos(q))就得到了两向量的夹角


C = A*B

C向量是垂直于A和B的向量,我们通常是判断C值的正负,来判断A和B的方向问题,在NPC寻路AI中通常用的比较多,我专门为这个写过一篇文档:我的网易博客http://m18507165498.blog.163.com/blog/static/278604309201710991621871/

我们通常用左手法则进行判断


比如,我们用Player的正前方方向,叉乘以Player到Npc方向的向量,按照左手法则如果结果是正,则NPC在玩家的右边、如果得出的结果为负,则NPC在玩家的左边。

同时,|A*B| = |a|*|b|*sin(q),如果|A|==1,那么|A*B| == |b|sin(q)相当于A和B组成的平行四边形面积

我们经常用这些来进行判断,两两之间的方位。

猜你喜欢

转载自blog.csdn.net/qq_38651460/article/details/81024760