shading method

Color shading(
  1. Vector3 viewPosition,
  2. Vector3 fragmentPosition,
  3. Vector3 normal,
  4. Material material,
)

Implementation

Color shading(Vector3 viewPosition, Vector3 fragmentPosition, Vector3 normal, Material material) {
  final Vector3 ambient = material.ambient.clone()..multiply(this.ambient*(material.emissivity*0.1));
  final Vector3 lightDir = (viewPosition - fragmentPosition)..normalize();
  final double diff = math.max(normal.dot(lightDir), 0);
  final Vector3 diffuse = (material.diffuse * diff)..multiply(this.diffuse);

  final Vector3 viewDir = (viewPosition - fragmentPosition)..normalize();
  final Vector3 reflectDir = (-lightDir) - normal * (2 * normal.dot(-lightDir));
  final double spec = math.pow(math.max(viewDir.dot(reflectDir), 0.0), material.shininess) as double;
  final Vector3 specular = (material.specular * spec)..multiply(this.specular);

  ambient
    ..add(diffuse)
    ..add(specular)
    ..clampScalar(0, 1.0);

  return toColor(ambient, material.opacity);
}