最近在读《unity shader 入门精要》里面有些关于shader数学基础的。姑且做一下笔记和总结。
一,向量
这个东西非常非常牛皮。在三维图形计算中,我们的根本需求无非三点:
1)位置(坐标)。
2)方向(比如光照方向啊,模型朝向啊)。
3)长度(有长度就有体积,有体积就有肉体啊阴影啊之类的,总之就你想要啥就有啥)。
向量这个概念,从代数的层面整合了图形所需要的全部关键信息,可以看作是代码-->图像的,完美的桥梁。
二,向量运算
1,加减乘除
这个东西最屌的在于它的几何意义。
乘除的几何意义非常简单,就是scale缩放。加减法的几何意义在我看来是更有用的。
用处就多了,比如你的角色从一个地方移动到另一个地方,这个角色身上的全部的vertex坐标都会移动,新的坐标就是利用最原始的向量的加减法得到的。换句话说,你想知道一个点相对于另一个点的位移,就需要用到向量加减法。
2,向量的模(就是向量长度)
3D渲染中,一个三角面是基本单位,这个三角面的大小,就是通过向量模来获得的。非常有用。
3,单位向量(归一化)
指的是把向量变成模为1的向量。这个也超级有用。在shader计算中,很多向量最终都需要归一化处理(因为很多计算比如点积,只需要方向不需要长度)
unity中一般是这个函数normalize()来获得向量的单位向量。
4,点积
可以看到,点积的结果变成了一个非坐标的常量。这个常量代表的意义是:向量b在a方向上的投影的长度。
运算律:
1)交换律:
2)结合律:
3)分配律:
点积属于在shader计算中,超级大量运用的东西。一般在unity中都是dot(x,y)来计算点积。
5,叉积
这个东西比较抽象了。但是用途非常广泛。先说公式运算率,最后捋一下用途。
几何意义:
垂直于a,b的向量。
重要性质:
如果
如果
如果
这个性质可以判断a和b的方向关系。
运算率:
1)反交换律:
2)分配律加法:
3)雅可比恒等式:
用途:
1,判断三角形顺逆
2,判断折线拐向(光)
3,判断一个点在一条直线的哪一侧(或者点在是否在线段上)
4,判断两条直线是否相交
*说一下叉乘运算那个冗长的式子该如何记。
在unity中,叉乘都是直接cross()的,其实不需要记住公式,但是记一下公式总是没坏处。这里只陈述下我自己的方法,野路子……博君一笑。
=
=
=
=
利用这个方法,直接摆积木一样就可以搞定这个超长的公式了。关键点是记住脚标的规律。
这一篇先预热下,下一篇重点说一下矩阵的基础知识和unity中的应用。矩阵和向量一样厉害。