INTERFACEShadingProp ; IMPORT AnimHandle, Prop; TYPE Kind = {Flat, Gouraud};
Kind
enumerates the supported shading methods. Here is what they do,
straight from the PEX manual:
Flat
: The color resulting from a single light source computation
is used for the entire surface. No interpolation will be preformed
across surface interiors or edges. In PEXlib, this is called
PEXSurfaceInterpNone; in OpenGL, it is called GL_FLAT.
Gouraud
: The colors are computed at the vertices of the surface according
to the current reflection model. These color values are then interpolated
across the interior of the surface or edges. In PEXlib, this is called
PEXSurfaceInterpColour; in OpenGL, it is called GL_SMOOTH.
The PEX 5.0 standard provides two more shading methods, dot-product shading (PEXSurfaceInterpDotProduct) and Phong shading (PEXSurfaceInterpNormal). However, most existing implementations of PEX (including the ones available at SRC) do not support these two methods, and OpenGL does not provide them at all. So, we chose not to include them into Anim3D.
TYPE Name <: PublicName; PublicName = Prop.Name OBJECT METHODS bind (v : Val) : Prop.T; END; Val <: PublicVal; PublicVal = Prop.Val OBJECT beh : Beh; METHODS init (beh : Beh) : Val; get () : Kind RAISES {Prop.BadMethod}; value (time : LONGREAL) : Kind RAISES {Prop.BadMethod}; END; Beh <: PublicBeh; PublicBeh = Prop.Beh OBJECT METHODS init () : Beh; END; ConstBeh <: PublicConstBeh; PublicConstBeh = Beh OBJECT METHODS init (p : Kind) : ConstBeh; set (p : Kind); END; SyncBeh <: PublicSyncBeh; PublicSyncBeh = Beh OBJECT METHODS init (ah : AnimHandle.T; p : Kind) : SyncBeh; addRequest (r : Request) RAISES {Prop.BadInterval}; (* shortcuts for particular instances of "addRequest" *) change (p : Kind; start := 0.0) RAISES {Prop.BadInterval}; END; AsyncBeh <: PublicAsyncBeh; PublicAsyncBeh = Beh OBJECT METHODS init () : AsyncBeh; compute (time : LONGREAL) : Kind RAISES {Prop.BadMethod}; END; DepBeh <: PublicDepBeh; PublicDepBeh = Beh OBJECT METHODS init () : DepBeh; compute (time : LONGREAL) : Kind RAISES {Prop.BadMethod}; END; Request <: PublicRequest; PublicRequest = Prop.Request OBJECT METHODS init (start, dur : REAL) : Request; value (startkind : Kind; reltime : REAL) : Kind RAISES {Prop.BadMethod}; END; PROCEDURE NewConst (p : Kind) : Val; PROCEDURE NewSync (ah : AnimHandle.T; p : Kind) : Val; PROCEDURE NewAsync (b : AsyncBeh) : Val; PROCEDURE NewDep (b : DepBeh) : Val; END ShadingProp.