Shader getShader(Intersection intersect)

Returns the shader for a given intersection point.

Source

Shader getShader(Intersection intersect) {
  PluggableShader ret = this._shader.clone();

  ret.position = intersect.hitPoint;

  // To determine normal, derive function in all directions (gradient).
  MathFunction fDx = f.derive('x')..simplify();
  MathFunction fDy = f.derive('y')..simplify();
  MathFunction fDz = f.derive('z')..simplify();

  cm.bindVariableName('x', new Number(intersect.hitPoint.x));
  cm.bindVariableName('y', new Number(intersect.hitPoint.y));
  cm.bindVariableName('z', new Number(intersect.hitPoint.z));

  double gradX = fDx.evaluate(EvaluationType.REAL, cm);
  double gradY = fDy.evaluate(EvaluationType.REAL, cm);
  double gradZ = fDz.evaluate(EvaluationType.REAL, cm);

  ret.normal = new Vector3(gradX, gradY, gradZ).normalize();

  return ret;
}