Opengl中reflect反射算法

Opengl中reflect反射算法

在opengl或者其他的游戏引擎shader(比如unity3d中),都有一个方法叫做reflect用来计算光的反射向量,他的参数就是入射光向量和像素法线向量。reflect(R,N)。那么他的内部原理到底是什么呢?
我们先来看下下面这个图片:
在这里插入图片描述
如图所示,L就是入射向量,N就是法线,R就是反射向量,r是R平移到L的箭头上和N构成了一个三角形(向量没有位置,只有方向,所以可以随便平移),l是L平移到R的箭头上和N构成了一个三角形,于是这就构成了一个菱形。
我们根据三角公式:a = |L| cosθ
如果L是单位向量,则a = cosθ
那么菱形的垂直中线长度 t = 2·cosθ
然后我们乘以N的单位向量,把t从标量变成向量
T = 2·cosθ·N
根据向量的特性,r = 2·cosθ·N - L
因为N和L都是单位向量,我们根据向量点积运算:
L·N = |L||N|cosθ
因为单位向量的长度为1,于是整个方程又可以简化为
L·N = cosθ
于是 r = 2·dot(L,N)·N - L
以上便是reflect的运算公式

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值