作者tomjpsun (汤姆熊)
看板Physics
标题[问题] Snell's Low 的套用
时间Mon Mar 14 11:15:38 2016
【出处】
https://gist.github.com/tomjpsun/f11cb8d692a9655bd5af 第 174 到 181 行
虽然问题是以程式的方式呈现,但是小弟感觉不懂的是这个定律的套用,
如果板上大大觉得 po 错地方,还请鞭小力一点...
【题目】这一段是光迹追踪,遇到透明物体的计算, 节录如下:
174 if (sphere->transparency) {
175 float ior = 1.1, eta = (inside) ? ior : 1 / ior; // are we inside or outside the surface?
176 float cosi = -nhit.dot(raydir);
177 float k = 1 - eta * eta * (1 - cosi * cosi);
178 Vec3f refrdir = raydir * eta + nhit * (eta * cosi - sqrt(k));
179 refrdir.normalize();
180 refraction = trace(phit - nhit * bias, refrdir, spheres, depth + 1);
181 }
【瓶颈】
175 假设光线由球面外进入的情形,此时 inside=true, eta 设定为 ior(即 1.1)
176 nhit:入射点, raydir: 入射光, 皆已经 normalized, 所以 cosi 为入射角
177 1-cosi*cosi 为 入射角 sin 平方, 这里看来是套用 snell's law, eta 不是
应该乘以 sin(折射角) 吗?开始看不懂了...
178 为何这样就得到折射线?也看不懂.
看了一天都不懂, 还请各位板上大大指点一下!谢谢!
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 61.231.108.44
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Physics/M.1457925341.A.63F.html
2F:→ lucifiel1618: 的,178是直接套用了alpha=eta, beta=eta*cosi-sqrt 03/14 20:02
3F:→ lucifiel1618: (k)的这组解,然後177对应(3.17)。简单说我觉得你是 03/14 20:03
4F:→ lucifiel1618: 对的,这边应该是k=1-(1-cosi*cosi)/eta/eta 03/14 20:04
5F:→ tomjpsun: 感谢回应!这篇推导得很详尽,如果依照论文 eq 3.26 回 03/15 09:51
6F:→ tomjpsun: 来对照, eta 其实可能是 alpha. 这样一切都合理了. 03/15 09:58