1,理论分析
怎么画一杯水呢?
场景中涉及三种介质:空气(eta_air)、玻璃(eta_glass)、水(eta_water)。
在用trace的过程中,需要特别注意的是:介质边界面的法向量的方向。
因为,法向量的方向决定着光线折射过程中使用的是某折射率还是该折射率的倒数。
如下来两张截图是本人学习过程中的手稿:
补充一张相关参数的截图:
2,基本图形
这些基本图形是在学习“Q94:怎么用raytracing画部分圆环(PartTori)”章节时生成的。
章节链接:http://blog.youkuaiyun.com/libing_zeng/article/details/64131906
完整代码链接:http://download.youkuaiyun.com/detail/libing_zeng/9787740
Annulus:
Disk:
Concave Cylinder:
Convex Cylinder:
Concave Part Torus:
3,C++代码实现GlassOfWater
4,测试图形
图形b:(耗时5568s)
pinhole_ptr->set_eye(2.5, 0, 5); // for b
pinhole_ptr->set_lookat(0, 1, 0);
pinhole_ptr->set_view_distance(1000.0); // for b
图形c:(耗时7408s)
给图形a加上阴影
5,其他说明
[1]. Kevin Suffern, Ray Tracing from theGround Up, A K PetersLtd, 2007.