RTIOW-ch8:Metal

我们希望不同的物体有不同的材质,所以我们可以搞个material类。

射线如何从金属镜面反射出来:

红色的反射光线方向正好是(v + 2B)。 在我们的设计中,N是一个单位矢量,但是v未必。 B的长度应该是点(v,N)。 因为v指向,我们将需要一个相减运算。

我们可以将镜面反射和漫反射模型结合起来,营造出蒙蒙的镜面效果。通过一个名为fuzz的参数约束漫反射的收束程度,当fuzz=0的时候,就是理想的镜面反射效果:

material.h:

cpp:

最终效果:

左右两个球是镜面材质球,每个球中都有其他两个球的镜像。注意是镜像,不是透明。

 

参考书籍:《Ray Tracing in One Weekend》

RTIOW系列项目地址:GitHub

RTIOW系列笔记:

RTIOW-ch1:Output an image

RTIOW-ch2:The vec3 class

RTIOW-ch3:Rays, a simple camera, and background

RTIOW-ch4:Adding a sphere

RTIOW-ch5:Surface normals and multiple objects

RTIOW-ch6:Antialiasing

RTIOW-ch7:Diffuse Materials

RTIOW-ch8:Metal

RTIOW-ch9:Dielectrics

RTIOW-ch10:Positionable camera

RTIOW-ch11:Defocus Blur

RTIOW-ch12:Where next