光线折射公式推导:Snell’s Law

设 入射光 i\mathbf{i}i 和 折射光 t\mathbf{t}t 均为单位向量,由Snell’s law可知 ηisin⁡θi=ηtsin⁡θt\eta_i \sin \theta_i = \eta_t \sin \theta_tηi​sinθi​=ηt​sinθt​ 。

其中 ηi,ηt\eta_i,\eta_tηi​,ηt​ 为反射系数(typically air = 1.0, glass = 1.3–1.7, diamond = 2.4)。

因为 sin⁡θi=∣i∥∣∣i∣,sin⁡θt=∣t∥∣∣t∣\sin\theta_i=\cfrac{|\mathbf{i}_{\parallel}|}{|\mathbf{i}|},\ \sin\theta_t=\cfrac{|\mathbf{t}_{\parallel}|}{|\mathbf{t}|}sinθi​=∣i∣∣i∥​∣​, sinθt​=∣t∣∣t∥​∣​ ,故:
ηi∣i∥∣∣i∣=ηt∣t∥∣∣t∣ηi∣i∥∣=ηt∣t∥∣\begin{matrix} \eta_i \cfrac{|\mathbf{i}_{\parallel}|}{|\mathbf{i}|} = \eta_t \cfrac{|\mathbf{t}_{\parallel}|}{|\mathbf{t}|} \\ \eta_i |\mathbf{i}_{\parallel}| = \eta_t |\mathbf{t}_{\parallel}| \\ \end{matrix} ηi​∣i∣∣i∥​∣​=ηt​∣t∣∣t∥​∣​ηi​∣i∥​∣=ηt​∣t∥​∣​
又因 i\mathbf{i}i 和 t\mathbf{t}t 平行且方向相同:
ηi⋅i∥=ηt⋅t∥t∥=ηiηt⋅i∥=ηiηt(i+cos⁡θi⋅n)\begin{matrix} \eta_i \cdot \mathbf{i}_{\parallel} &=& \eta_t \cdot \mathbf{t}_{\parallel}& \\ \mathbf{t}_{\parallel} &=& \cfrac{\eta_i}{\eta_t} \cdot \mathbf{i}_{\parallel} \\ &=& \cfrac{\eta_i}{\eta_t} (\mathbf{i}+\cos \theta_i\cdot \mathbf{n} ) \end{matrix} ηi​⋅i∥​t∥​​===​ηt​⋅t∥​ηt​ηi​​⋅i∥​ηt​ηi​​(i+cosθi​⋅n)​
其中 i∥=i⋅n∣i∣∣n∣n=cos⁡θi⋅n\mathbf{i}_{\parallel}=\cfrac{\mathbf{i}\cdot \mathbf{n}}{|\mathbf{i}| |\mathbf{n}|}\mathbf{n}=\cos \theta_i \cdot \mathbf{n}i∥​=∣i∣∣n∣i⋅n​n=cosθi​⋅n.

又因 t=t⊥+t∥\mathbf{t}=\mathbf{t}_{\perp}+\mathbf{t}_{\parallel}t=t⊥​+t∥​ 且 ∣t∣2=∣t⊥∣2+∣t∥∣2|\mathbf{t}|^2=|\mathbf{t}_{\perp}|^2 + |\mathbf{t}_{\parallel}|^2∣t∣2=∣t⊥​∣2+∣t∥​∣2 :
∣t⊥∣2=∣t∣2−∣t∥∣2∣t⊥∣=1−∣t∥∣2t⊥=−1−∣t∥∣2⋅n\begin{matrix} |\mathbf{t}_{\perp}|^2 &=& |\mathbf{t}|^2-|\mathbf{t}_{\parallel}|^2 \\ |\mathbf{t}_{\perp}| &=& \sqrt {1-|\mathbf{t}_{\parallel}|^2} \\ \mathbf{t}_{\perp} &=& -\sqrt {1-|\mathbf{t}_{\parallel}|^2}\cdot \mathbf{n} \\ \end{matrix} ∣t⊥​∣2∣t⊥​∣t⊥​​===​∣t∣2−∣t∥​∣21−∣t∥​∣2​−1−∣t∥​∣2​⋅n​
从而:
t=t∥+t⊥\mathbf{t}=\mathbf{t}_{\parallel}+\mathbf{t}_{\perp} t=t∥​+t⊥​

// r_in 为射入物体的光线
vec3 refract(const vec3& r_in, const vec3& outward_normal, double etai_over_etat) {double cos_thetai = dot(-r_in, outward_normal);vec3 r_out_parallel =  etai_over_etat * (r_in + cos_thetai * outward_normal);vec3 r_out_perp = -sqrt(1.0 - r_out_parallel.length_squared()) * outward_normal;return r_out_perp + r_out_parallel;
}

也可进一步化简:
t=t∥+t⊥=ηiηt⋅(i+cos⁡θi⋅n)−1−∣i∥∣2⋅n=ηiηt⋅(i+cos⁡θi⋅n)−1−sin⁡2θt⋅n=ηiηt⋅i+(ηiηtcos⁡θi−1−sin⁡2θt)⋅n\begin{matrix} \mathbf{t} &=&\mathbf{t}_{\parallel}+\mathbf{t}_{\perp} \\ &=&\cfrac{\eta_i}{\eta_t} \cdot (\mathbf{i}+\cos \theta_i\cdot \mathbf{n}) -\sqrt {1-|\mathbf{i}_{\parallel}|^2}\cdot \mathbf{n} \\ &=&\cfrac{\eta_i}{\eta_t} \cdot (\mathbf{i}+\cos \theta_i\cdot \mathbf{n}) -\sqrt {1-\sin ^2\theta_t}\cdot \mathbf{n} \\ &=&\cfrac{\eta_i}{\eta_t} \cdot \mathbf{i}+\left (\cfrac{\eta_i}{\eta_t} \cos \theta_i -\sqrt {1-\sin ^2\theta_t} \right) \cdot \mathbf{n} \end{matrix} t​====​t∥​+t⊥​ηt​ηi​​⋅(i+cosθi​⋅n)−1−∣i∥​∣2​⋅nηt​ηi​​⋅(i+cosθi​⋅n)−1−sin2θt​​⋅nηt​ηi​​⋅i+(ηt​ηi​​cosθi​−1−sin2θt​​)⋅n​
由Snell’s law公式可得 sin⁡θt=ηiηt⋅sin⁡θi\sin \theta_t=\cfrac{\eta_i}{\eta_t} \cdot \sin \theta_isinθt​=ηt​ηi​​⋅sinθi​,
t=ηiηt⋅i+(ηiηtcos⁡θi−1−(ηiηt)2sin⁡2θi)⋅n=ηiηt⋅i+(ηiηtcos⁡θi−1−(ηiηt)2(1−cos⁡2θi))⋅n\begin{matrix} \mathbf{t} &=&\cfrac{\eta_i}{\eta_t} \cdot \mathbf{i}+ \left ( \cfrac{\eta_i}{\eta_t} \cos \theta_i -\sqrt {1-(\cfrac{\eta_i}{\eta_t})^2\sin^2 \theta_i}\ \right ) \cdot \mathbf{n} \\ &=&\cfrac{\eta_i}{\eta_t} \cdot \mathbf{i}+ \left (\cfrac{\eta_i}{\eta_t} \cos \theta_i -\sqrt {1-(\cfrac{\eta_i}{\eta_t})^2(1-\cos^2 \theta_i)}\right ) \cdot \mathbf{n} \\ \end{matrix} t​==​ηt​ηi​​⋅i+⎝⎛​ηt​ηi​​cosθi​−1−(ηt​ηi​​)2sin2θi​​ ⎠⎞​⋅nηt​ηi​​⋅i+⎝⎛​ηt​ηi​​cosθi​−1−(ηt​ηi​​)2(1−cos2θi​)​⎠⎞​⋅n​
其中 cos⁡θi=i⋅n∣i∣∣n∣=i⋅n\cos\theta_i=\cfrac{\mathbf{i}\cdot \mathbf{n}}{|\mathbf{i}| |\mathbf{n}|}=\mathbf{i}\cdot \mathbf{n}cosθi​=∣i∣∣n∣i⋅n​=i⋅n 。

全反射现象 Total internal reflection

对于Snell’s law 的公式 sin⁡θt=ηiηt⋅sin⁡θi\sin \theta_t=\cfrac{\eta_i}{\eta_t} \cdot \sin \theta_isinθt​=ηt​ηi​​⋅sinθi​ ,当空气中的反射率大于物体内的反射率的时候,有可能会出现 ηiηt⋅sin⁡θi>1\cfrac{\eta_i}{\eta_t} \cdot \sin \theta_i>1ηt​ηi​​⋅sinθi​>1 的情况。

但是 sin⁡θt\sin\theta_tsinθt​ 的值一定是小于1的,故等式不可能成立。这个时候光线应该被反射,而不是折射。

光线折射公式推导:Snell‘s Law相关推荐

  1. 光线折射技术得到解决,中国光刻机技术再进一步,ASML后悔莫及

    近日有国内企业公布了一项关于光线折射等的EUV光刻机专利,这对于国内光刻机产业一直努力的EUV光刻机技术无疑是重大的突破,将有助于中国的芯片制造技术再前进一大步. 业界都清楚光刻机是一项技术密集度极高 ...

  2. Diopter mac版(AE光线折射朦胧模糊插件)

    Diopter for Mac是一款安装在After Effects中使用的AE光线折射朦胧效果插件,你可以使用ae插件Diopter为视频或者图像添加模糊.失真.调色等效果,使用很便捷,这里提供Ae ...

  3. 光线折射模拟的matlab仿真

    目录 1.算法概述 2.仿真效果 3.MATLAB源码 1.算法概述 光的折射是指光从一种介质斜射入另一种介质时,传播方向发生改变,从而使光线在不同介质的交界处发生偏折的现象.属于光的折射现象.光的折 ...

  4. Ray Tracing in One Weekend 读书笔记

    目录 第0章 概述 第1章 输出照片 第2章 vec3类 第3章 光线.一个简单的相机和背景 第4章 增加一个球 第5章 表面法向量和多物体 第6章 抗锯齿 第7章 漫反射材质 第8章 金属 第9章 ...

  5. 折射向量计算(Refraction Vector Calculation)

    上个月学习Peter Shirley-Ray Tracing in One Weekend的系列三本书,收获真的很多.这个系列的书真的是手把手教你如何从零开始构建一个光线跟踪渲染器,对新手(像我)非常 ...

  6. Shaders for Game Programmers and Artists(6) - 反射与折射

    反射 反射在上一篇的HDR中就已经用到了.简单说一下 反射发生的原理就是光线打到一个物体的面上之后,一部分光被弹回去的现象, 原理如下图 只要知道入射光线和发现,出射光线的方向就可以求出.通过这个方向 ...

  7. 【unity shader 入门精要 读书笔记】折射

    当光线从一种介质[例如空气]斜射入另外一种介质[例如玻璃]时,传播方向一般会发生改变. 当给定入射角时,可以使用 斯涅耳定律[Snell's Law]来计算反射角. 当光从介质 1 沿着和表面法线夹角 ...

  8. Unity Shader 入门精要——反射、折射

    目录 反射 折射 菲涅尔反射 反射 使用了反射效果的物体通常看起来就像镀了层金属.想要模拟反射效果很简单,我们只需要通过入射光线的方向和表面法线方向来计算反射方向,再利用反射方向对立方体纹理采样即可. ...

  9. 学习Scratchapixel--(6)光线模拟器

    反射 当光线和完美的镜面接触时,我们可以预知它返回的方向.这可以用反射定律计算出来.(公式简单,不赘述) 水虽然看上去像镜子,但是水和玻璃比起金属来说,只能算是很弱的镜面了. 透明度 当光线和透明物体 ...

最新文章

  1. Netty:Java 领域网络编程的王者
  2. 在Silverlight中绘制贝塞尔曲线
  3. c语言实战1200例 pdf6,C语言程序设计6.6.2.pdf
  4. 加载指定路径下所有文件
  5. 软件测试管理工具禅道开源版下载安装
  6. Python selenium 去掉“隐藏正受到自动测试软件的控制”
  7. jQuery插件开发(转)
  8. 【汇编语言】多模块程序结构
  9. python中jieba分词快速入门
  10. 软件工程学习进度第一周暨暑期学习进度之第一周汇总
  11. dw怎么打开html模板,Dreamweaver怎样使用网页模板及修改模板
  12. 假设检验基本思想与步骤
  13. ps -aux | grep xxx详解
  14. 如何评价光伏电站的运维能力
  15. ECharts热力图指定颜色
  16. 2022-04-27 openshift集群kubelet中出现unable to fetch pod logs错误问题定位
  17. TCP/IP五层协议体系结构的各层功能
  18. 显卡mx150和230哪个好_MX150和GTX1050哪个好?MX150与GTX1050性能天梯图对比
  19. 在IntelliJ IDEA中创建和运行java/scala/spark程序
  20. 感悟生活,我们的创造力去哪了?谈谈我们的教育

热门文章

  1. Matlab画图彩色变黑白
  2. C语言22选5体育彩票系统,22选5选号方法大全(二)
  3. linux查看端口占用终结,Linux查看端口占用
  4. 最新流浪猫流浪狗H5完整运营源码下载/可封装APP
  5. w3c搬运CSS念念碎
  6. python-docx+pandas实现word邀请函批量生成
  7. web直传cos(腾讯云)图片视频
  8. CSS3 变形:平移、旋转与缩放
  9. SQL Server数据库安全规划全攻略(转)
  10. 链路追踪工具 skywalking