test
接上面的一篇文章:薄膜干涉。上篇博客最后讲到利用fresnel equation实现薄膜干涉。其实fresnel equation同时也提供了光的折射信息,因为能量是守恒的,有多少光被反射,就有多少剩下的被折射了。
本文中将试着利用fresnel equation做一个肥皂泡,实现光的薄膜干涉和色散效果。
fresnel方程
当一束光L射向介质的界面时候,反射光R,折射光T的大小都可以用fresnel方程来计算。关于公式的描述,可以参考wiki和这篇blog.
fresnel方程的代码如下
/* Amplitude reflection coefficient (s-polarized) */
float rs(float n1, float n2, float cosI, float cosT) {
return (n1 * cosI - n2 * cosT) / (n1 * cosI + n2 * cosT);
}
/* Amplitude reflection coefficient (p-polarized) */
float rp(float n1, float n2, float cosI, float cosT) {
return (n2 * cosI - n1 * cosT) / (n1 * cosT + n2 * cosI);
}
/* Amplitude transmission coefficient (s-polarized) */
float ts(float n1, float n2, float cosI, float cosT) {
return 2 * n1 * cosI / (