calculateLight method
Implementation
void calculateLight(List<Light> lights,Vector3 position,Vector3 normal,Color color){
for(int l = 0; l < lights.length; l ++ ) {
Light light = lights[l];
Color lightColor = light.color ?? Color();
if(light is DirectionalLight){
Vector3 lightPosition = _vector3.setFromMatrixPosition( light.matrixWorld ).normalize();
num amount = normal.dot( lightPosition );
if ( amount <= 0 ) continue;
amount *= light.intensity;
color.r += lightColor.r * amount;
color.g += lightColor.g * amount;
color.b += lightColor.b * amount;
}
else if (light is PointLight){
Vector3 lightPosition = _vector3.setFromMatrixPosition( light.matrixWorld );
num amount = normal.dot( _vector3.subVectors( lightPosition, position ).normalize() );
if ( amount <= 0 ) continue;
amount *= light.distance == 0 ? 1 : 1 - Math.min( position.distanceTo( lightPosition ) / light.distance!, 1 );
if ( amount == 0 ) continue;
amount *= light.intensity;
color.r += lightColor.r * amount;
color.g += lightColor.g * amount;
color.b += lightColor.b * amount;
}
}
}