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;
}