<> <> <> <> <> DIRECTORY GraphicsColor, Matrix3d, Rope, SVVector3d; Shading: DEFINITIONS = BEGIN <<>> <> <> <> Color: TYPE = GraphicsColor.Color; Vector: TYPE = SVVector3d.Vector; Point3d: TYPE = Matrix3d.Point3d; LightSource: TYPE = REF LightSourceObj; LightSourceObj: TYPE = RECORD [name: Rope.ROPE, position: Point3d _ [0,0,0], color: Color]; LightSourceList: TYPE = LIST OF LightSource; CollimatedLambertianRadiance: PROCEDURE [surfaceNormal: Vector, lightSource: LightSource, albedo: REAL _ 1] RETURNS [radiance: REAL]; <> DiffuseReflectance: PUBLIC PROCEDURE [surfaceNormal: Vector, surfacePt: Point3d, surfaceColor: Color, lightSources: LightSourceList] RETURNS [completeColor: Color]; DiffuseAndSpecularReflectance: PROCEDURE [eyePoint: Point3d, surfaceNormal: Vector, surfacePt: Point3d, surfaceColor: Color, lightSources: LightSourceList] RETURNS [color: Color]; << Frank Crow's highlighted intensity model>> CollimatedSpecularRadiance: PROCEDURE [surfaceNormal: Vector, lightSource: LightSource, albedo: REAL _ 1] RETURNS [radiance: REAL]; <> SimpleFilmIrradiance: PROCEDURE [radiance: REAL, omegaAperture: REAL] RETURNS [irradiance: REAL]; SolidAngle: PROCEDURE [surfacePoint: Point3d, areaAperture: REAL] RETURNS [omegaAperture: REAL]; <> LamFilmIrradiance: PROCEDURE [surfaceNormal: Vector, lightSource: LightSource, albedo: REAL _ 1, omegaAperture: REAL] RETURNS [irradiance: REAL]; <> <<>> <> <<>> <> END.