用ray tracing的方式来生成图形,主要是分两步:
1,几何建模。即为“光线撞击物体”,求得撞击点。
2,给撞击点着色。我们之前的做法是:根据被撞击物体的材质(材质的颜色、材质对光线的反射和折射)来设置撞击点的颜色。用到的反射、折射是:理想漫反射、理想镜面反射、理想镜面折射。至于“光源”,只是环境光(ambient light),没有特定的光源。
接下来,我们要做的是:
1,考虑材质的更为实际的反射、折射模型
2,考虑特定光源:平行光光源、面光源(含点光源)
主要参考的书籍为《Ray Tracing from the Ground Up》。所以,我们先将该部分的主要代码移植到Codeblocksproject上(纯属个人爱好,更习惯用Codeblocks)。
移植后的Codeblocks项目保存的文件名是“raytracegroundup_transplant1_chapter14_20170217”,网络链接如下:
http://download.csdn.net/detail/libing_zeng/9756504
68.0.1 代码移植后生成的图形
这个图形由两部分组成:
1,最后灰色的是一个垂直的plane;
2,35个不同颜色的球。
其中物体是理想漫反射模型的材质;有两部分光照:环境光(ambient light)和平行光光源。
68.0.2 模块图
需要学习的新的东西是:“2,给撞击点着色”。
其中又包含两大部分内容:
2.1, 材质的反射、折射模型:涉及影响反射折射光的比例及其方向的物理属性
2.2, 光照模型:涉及到达撞击点的光照的强度和方向
(光照的强度和方向)+(材质影响反射折射光的比例及其方向的物理属性)=(反射到相机的光的强度)
这里先说明一下:考虑光的频率,光就呈现不同的颜色。(频率对应颜色)
68.0.3 主要文件层级图
World:
就是“世界”,所有的物体、所有的光源、相机(眼睛)、生成图像的屏幕等等都是在World里面初始化的。可以将World