コード例 #1
0
 public override float IntensityAt(Vector3 position, Vector3 surfaceNormal, Scene scene, out Color color)
 {
     color = _color;
     Vector3 direction = position - _position;
     float distance = direction.Length();
     var ray = new Ray(_position, direction);
     bool visible = scene.IsVisible(ray, distance);
     if (!visible) return 0;
     float intensity = _intensity * _rangeSquared / (_rangeSquared + distance * distance);
     float normalAdjustedIntensity = intensity *
                                     Vector3.Dot(surfaceNormal, Vector3.Zero - direction.Normalized());
     return Math.Max(normalAdjustedIntensity, 0);
 }