码迷,mamicode.com
首页 > 其他好文 > 详细

求反射向量

时间:2016-07-06 15:18:24      阅读:175      评论:0      收藏:0      [点我收藏+]

标签:

在图形学中,计算光照模型时,经常需要求取反射向量,一般的shader函数库都提供计算反射向量的方法,下面介绍一下如何手动计算反射向量。

给定入射光线向量I和平面法向量N,求反射向量R,如下图。为了方便计算,这里假定I和N都是单位向量(模为1,编程时可先将I和N单位化)

方法一:

技术分享

设入射光线向量I和反射平面的法向量N之间的夹角为theta。连接I的始端和R的末端,则有

R = 2P - I              (1)

现在问题变成了如何求取P,设入射点0到P与N的交点的向量为S,那么有

P = I + S               (2)

现在问题变成了如何求取向量S,向量S即向量-N(注意,这里是-N,因为S和N的方向相反。)在向量N上的投影,根据向量的投影公式有

技术分享

因为N是单位向量,简化一下得到

技术分享

将S代入公式(2),再将P代入公式(1)得到

技术分享

方法二:

将R平移一下,与向量N的延长线相交。

技术分享

由于入射角和反射角相等,且I和R的长度也相等,所以三角形ION是等腰三角形。故有

ON = 2S

所以有

R = I + 2S

而S是-I在N上的投影,所以有

技术分享

由于N是单位向量,简化一下得到

技术分享

所以

技术分享

貌似方法二更直观些。

求反射向量

标签:

原文地址:http://blog.csdn.net/heyuchang666/article/details/51833893

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!