# 实践-光线追踪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)操作,其意义为两个颜色中每个颜色通道相乘。

# 格子材质

# Phong材质

# 渲染材质

# 多个几何物体

# 平面

# 并集

# 反射

# 结语