unity shader数学

unity shader 相关的学习资料  https://zhuanlan.zhihu.com/p/29383687

http://www.icourses.cn/jpk/changeforVideo.action?resId=844859&courseId=2987&firstShowFlag=3

点乘 推导公式
https://www.ggdoc.com/5b2S5LiA5YyW55qE5aW95aSE0/NjYyNmNmMGNhNDUxNzcyMzJmNjBhMjc20/
http://blog.csdn.net/dcrmg/article/details/52416832
-------------------------------------
所谓点乘(也常称作内积),数学定义如下:
点乘只是表达这个结果的一种方式,符号不重要,叫法也不重要,我可以叫点乘,内积,也可以叫" 相乘" ,定义"#"字符代替“ ·” 符号都可以,只是人们约束习惯这么这么写,那我们就也都这么写。而且,也不要纠结为什么是这么定义,没有为什么,人们就是这么“龟腚”这个公式的,我们要研究的是这个规定到底能干嘛?有啥具体意义?
a.点乘的具体几何意义:
根据公式,我们可以得出 a ·b =|a | |b |cosθ 我试着证明为什么会是这样(为了能让大家看的方便,我将向量标为蓝色,具体长度标为红色):
定义向量 c = a - b 这样就形成了一个封闭的三角形,c 向量为他的第三边
由于余弦定理我们可以知道c 2 = a 2 + b 2 - 2ab cos(θ) (这里的a,b,c 全部都是每一边的具体长度) 根据定义我们可以推导出c ·c =c 2(有兴趣的朋友可以去试着推导一下)
所以: c·c = a·a + b·b - 2ab cos(θ)
因为向量的点乘满足分配率:a·(b+c)=a·b+a·c
c = a - b
c·c = (a -b)·(a - b)
c·c = (a·a - 2a·b + b·b)
(a·a - 2a·b + b·b) = a 2 + b 2 - 2ab cos(q)
约掉 a·a=a 2, b·b=b 2;
-2a·b = -2ab cos(θ)
a·b = ab cos(θ)
因为 a =|a|
所以 a ·b =|a | |b |cosθ
跟据这个公式,我们能拿到两个向量之间的夹角,这对于判断两个向量是否同一方向,是否正交(也就是垂直) ,很有用处。具体判断如下:
a ·b>0 方向基本相同,夹角在0°到90°之间
a ·b=0 正交
a ·b<0 方向基本相反,夹角在90°到180°之间
所 以,点乘的几何意义和用处就是计算两个向量之间的夹角,以及在某一方向上的投影。至于为什么要判断两个向量是否方向一致,这在3D 中很有用处。比如:3D 技术中的光栅化(光栅化的 任务是为了绘制每个三角形单元,如何计算构成三角形单元的每个像素的颜色值)过程中,我们可以根据两个面的法向量的点乘判断两个面是否处于同一面,如果不 是,那么只要光栅化其中需要显示出来的一面,而另一面我们就不用光栅化它(因为我们根本看不到被遮住的面),这样就节省了很多很多计算,能加快效率

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值