shading method
Color
shading(
- Vector3 viewPosition,
- Vector3 fragmentPosition,
- Vector3 normal,
- 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);
}