# 实践-光线追踪2
# 材质
渲染深度和法向量只为测试和调试,要显示物件的"真实"颜色,需要定义该交点向某方向(如往视点的方向)发出的光的颜色,称之为几个图形的材质(material )。
材质的接口为function sample(ray, posiiton, normal) ,传回颜色Color的对象。这是个极简陋的接口,临时做一些效果出来,有机会再详谈。
# 颜色
颜色在CG里最简单是用红、绿、蓝三个通道(color channel)。为实现简单的 Phong 材质,还加入了对颜色的简单操作。
export const Color = function (r, g, b) {
this.r = r;
this.g = g;
this.b = b;
};
Color.prototype = {
copy: function () {
return new Color(this.r, this.g, this.b);
},
add: function (c) {
return new Color(this.r + c.r, this.g + c.g, this.b + c.b);
},
multiply: function (s) {
return new Color(this.r * s, this.g * s, this.b * s);
},
modulate: function (c) {
return new Color(this.r * c.r, this.g * c.g, this.b * c.b);
}
};
Color.black = new Color(0, 0, 0);
Color.white = new Color(1, 1, 1);
Color.red = new Color(1, 0, 0);
Color.green = new Color(0, 1, 0);
Color.blue = new Color(0, 0, 1);
export default Color;
这Color类很像Vector3类,值得留意的是,颜色有调制(modulate)操作,其意义为两个颜色中每个颜色通道相乘。