光学反射向量计算
在图形学中,计算光照模型时,经常需要求取反射向量,一般的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是单位向量,简化一下得到
文章图片
所以
文章图片
貌似方法二更直观些。
推荐阅读
- 316日课总结--反射效应---
- java|java Field类的使用
- Java中的反射
- 反射
- 词向量|词向量 Word2Vec, Glove, FastText
- Unity中使用反射机制调用函数
- Kotlin反射
- 人脸识别|【人脸识别系列】| 实现人脸截图保存并编写128维特征向量
- 【MAC|【MAC 上学习 C++】Day 21-1. 习题9-3 平面向量加法 (15 分)
- 向量空间相关概念总结-向量空间