public static double diffuse(ObjectR o, Point p, Light l) { double[] norm = calc.normalize(o.normal(p)); double[] light = calc.normalize(calc.sub(l.dim, p.coord)); double factor = calc.dot(norm, light); factor = Math.max(factor, 0); return o.kd() * factor + o.ka(); }
public static double specular(ObjectR o, Point p, Light l, Camera c) { double[] norm = calc.normalize(o.normal(p)); double[] eye = calc.normalize(calc.sub(c.point.coord, p.coord)); double[] light = calc.normalize(calc.sub(l.dim, p.coord)); double[] h = calc.normalize(calc.add(eye, light)); double factor = calc.dot(norm, h); factor = Math.max(factor, 0); return o.ks() * Math.pow(factor, o.n()); }