private LightColor Specular(Vector3D eyePos, Vector3D pos, Vector3D normal, Material mate) { LightColor ret = new LightColor(0.0D, 0.0D, 0.0D); if (!type.Equals("AMBIENCE")) { Vector3D nml = normal; Vector3D lv = LightDirectionVector(pos, normal); Vector3D ev = EyeDirectionVector(pos, eyePos); double a = nml.DotProd(lv); Vector3D rv = nml.SclProd(2.0D * a).Sub(lv); double cosc = rv.DotProd(ev); if (cosc > 0.0D) { double k = Math.Pow(cosc, mate.specularSharpness); for (int i = 0; i < 3; i++) { ret.SetElement(i, Strength(pos).GetElement(i) * k * mate.specular.GetElement(i)); } } } return(ret); }
private LightColor Diffuse(Vector3D pos, Vector3D normal, Material mate) { LightColor ret = new LightColor(0.0D, 0.0D, 0.0D); Vector3D nml = normal.NmlVec(); Vector3D lv = LightDirectionVector(pos, normal); double cosc = nml.DotProd(lv); if (cosc > 0.0D) { for (int i = 0; i < 3; i++) { ret.SetElement(i, Strength(pos).GetElement(i) * cosc * mate.diffuse.GetElement(i)); } } return(ret); }