DIRECTORY Rope USING [ ROPE ], IO USING [ STREAM ], Terminal USING [ Virtual ], Imager USING [ Rectangle, Context] , ScanConvert USING [ GetColorProc ], ThreeDBasics USING [ ClipState, Context, OutCode, RGB, ShadingSequence, ShapeInstance, ShapeSequence, Triple, VertexInfo, VertexInfoSequence, VertexSequence, VtxToRealSeqProc ]; ThreeDScenes: CEDAR DEFINITIONS ~ BEGIN Error: SIGNAL [reason: ErrorDesc]; ErrorDesc: TYPE ~ RECORD [code: ATOM, explanation: Rope.ROPE]; RGB: TYPE ~ ThreeDBasics.RGB; Triple: TYPE ~ ThreeDBasics.Triple; -- RECORD [ x, y, z: REAL]; OutCode: TYPE ~ ThreeDBasics.OutCode; VertexSequence: TYPE ~ ThreeDBasics.VertexSequence; ShadingSequence: TYPE ~ ThreeDBasics.ShadingSequence; VertexInfo: TYPE ~ ThreeDBasics.VertexInfo; VertexInfoSequence: TYPE ~ ThreeDBasics.VertexInfoSequence; ClipState: TYPE ~ ThreeDBasics.ClipState; ShapeInstance: TYPE ~ ThreeDBasics.ShapeInstance; ShapeSequence: TYPE ~ ThreeDBasics.ShapeSequence; Context: TYPE ~ ThreeDBasics.Context; ShadingProcs: TYPE ~ RECORD [ThreeDBasics.VtxToRealSeqProc, ScanConvert.GetColorProc]; Create: PROC[] RETURNS [REF Context]; DisplayFromImagerContext: PROC[ context: REF Context, imagerCtx: Imager.Context ]; DisplayFromTerminal: PROC[ context: REF Context, terminal: Terminal.Virtual ]; DisplayFromVM: PROC[ context: REF Context, width, height: NAT, renderMode: ATOM _ $FullColor ]; AddDepthBuffer: PROC[ context: REF Context ]; AddAlphaBuffer: PROC[ context: REF Context ]; SetEyeSpace: PROC[ context: REF Context ]; -- get worldspace to eyespace matrix SetWindow: PROC[context: REF Context, size: Imager.Rectangle]; WindowFromViewPort: PROC[viewPort: Imager.Rectangle] RETURNS[Imager.Rectangle]; SetViewPort: PROC[context: REF Context, size: Imager.Rectangle]; FillViewPort: PROC[context: REF Context, clr: RGB]; -- clears for new image FillInBackGround: PROC[context: REF Context]; -- loads background behind current image SetView: PROC[context: REF Context, eyePoint, ptOfInterest: Triple, fieldOfView: REAL _ 40.0, rollAngle: REAL _ 0.0, upDirection: Triple _ [ 0., 0., 1.], hitherLimit: REAL _ .01, yonLimit: REAL _ 1000.0]; SetLight: PROC[context: REF Context, name: Rope.ROPE, position: Triple, color: RGB _ [1., 1., 1.]] RETURNS[REF ShapeInstance]; DeleteLight: PROC[context: REF Context, name: Rope.ROPE]; GetAmbientLight: PROC[context: REF Context, normal: Triple] RETURNS[RGB]; ReadScene: PROC[context: REF Context, input: IO.STREAM]; WriteScene: PROC[context: REF Context, output: IO.STREAM]; NewShape: PROC[ name: Rope.ROPE ] RETURNS[REF ShapeInstance]; FindShape: PROC[ set: REF ShapeSequence, name: Rope.ROPE ] RETURNS[REF ShapeInstance]; AddShape: PROC[ set: REF ShapeSequence, shape: REF ShapeInstance ] RETURNS[REF ShapeSequence]; DeleteShape: PROC[ set: REF ShapeSequence, name: Rope.ROPE ] RETURNS[REF ShapeSequence]; CopyShape: PROC[ shape: REF ShapeInstance, newName: Rope.ROPE ] RETURNS[REF ShapeInstance]; PlaceShape: PROC[ shape: REF ShapeInstance, location: Triple]; -- absolute position MoveShape: PROC[ shape: REF ShapeInstance, delta: Triple]; -- relative position OrientShape: PROC[ shape: REF ShapeInstance, axis: Triple]; -- tilt from vertical RotateShape: PUBLIC PROC[ shape: REF ShapeInstance, axisBase, axisEnd: Triple, theta: REAL ]; SetPosition: PROC[shape: REF ShapeInstance, concat: BOOLEAN _ FALSE]; PutShading: PROC[ shape: REF ShapeInstance, key: ATOM, value: REF ANY]; GetShading: PROC[ shape: REF ShapeInstance, key: ATOM ] RETURNS [value: REF ANY]; InitShades: PROC[ shape: REF ShapeInstance ] RETURNS[shade: REF ShadingSequence]; GetClipCodeForPt: PROC[context: REF Context, pt: Triple] RETURNS[clip: OutCode]; XfmPtToEyeSpace: PROC[context: REF Context, pt: Triple] RETURNS[Triple, OutCode]; XfmPtToDisplay: PROC[context: REF Context, shape: REF ShapeInstance, pt: Triple] RETURNS[Triple]; ShadeVtx: PROC [context: REF Context, pt: VertexInfo, shininess: REAL] RETURNS [RGB, REAL]; XfmToEyeSpace: PROC[context: REF Context, shape: REF ShapeInstance] RETURNS[ClipState]; XfmToDisplay: PROC[context: REF Context, shape: REF ShapeInstance]; GetVtxShades: PROC[ context: REF Context, shape: REF ShapeInstance ]; END. ΦThreeDScenes.mesa Copyright c 1984, 1986 by Xerox Corporation. All rights reserved. Last Edited by: Crow, October 2, 1986 10:20:13 am PDT Basic Types Procedures for Setting up Contexts Gets context Sets up context.display using imager context Sets up context.display using virtual terminal, render mode from state of color display Sets up context.display using virtual memory (not visible) full-color assumed Makes depth buffer in VM for context.display Makes alpha buffer in VM for context.display Procedures for Defining and Altering Environments Procedures for Manipulating Shapes Rotation about arbitrary axis Get new position matrix or concatenate to previous matrix Procedures for Manipulating Vertices ΚZ˜Ihead3šΟb™šœ Οmœ7™BJšœ5™5J˜šΟk ˜ Jšœ ŸœŸœ˜JšŸœŸœŸœ˜Idefaultšœ ŸœŸœ ˜Lšœ Ÿœ˜'LšœŸœ˜%LšœŸœ ŸœŽ˜Δ——head2šœŸœŸ ˜JšœŸ˜—š ™ IašœŸœ˜"Jš œ ŸœŸœŸœŸœ˜?JšŸœŸœŸœ˜JšœŸœΟc˜FLšœ Ÿœ˜%JšœŸœ˜3JšœŸœ ˜5Iunitšœ Ÿœ˜+LšœŸœ#˜;Lšœ Ÿœ˜)OšœŸœ˜1JšœŸœ˜1Ošœ Ÿœ˜&JšœŸœŸœ;˜V—š"œ™#Lšœ ™ šΟnœŸœŸœŸœ ˜%L™.—š‘œŸœ Ÿœ&˜RL™X—š‘œŸœ Ÿœ'˜NL™O—š ‘ œŸœ ŸœŸœŸœ˜iL™-—š‘œŸœ Ÿœ ˜.L™-—Lš‘œŸœ Ÿœ ˜.—š1™1Jš‘ œŸœ Ÿœ $˜RJš‘ œŸœ Ÿœ"˜>Lš‘œŸœŸœ˜OJš‘ œŸœ Ÿœ"˜@Jš ‘ œŸœ ŸœŸœ ˜KJš‘œŸœ Ÿœ  (˜VJš‘œŸœ Ÿœ7ŸœŸœAŸœŸœ ˜ΪJš‘œŸœ ŸœŸœŸœŸ œŸœ˜„Jš‘ œŸœ ŸœŸœ˜9Jš ‘œŸœ ŸœŸœŸœ˜IJš‘ œŸœ ŸœŸ œ˜8Jš‘ œŸœ ŸœŸ œ˜:—š"™"Jš ‘œŸœ ŸœŸœŸœ˜=Jš ‘ œŸœŸœŸœŸœŸœ˜VJš ‘œŸœŸœŸœŸ œŸœ˜dJš ‘ œŸœŸœŸœŸœŸœ˜XJš ‘ œŸœ ŸœŸœŸœŸœ˜bOš‘ œŸœ Ÿœ# ˜SJš‘ œŸœ Ÿœ# ˜RJš‘ œŸœ Ÿœ" ˜Tš ‘ œŸœŸœ Ÿœ2Ÿœ˜]Jšœ™—š ‘ œŸœŸœŸœŸœ ˜FJšœ9™9—Oš ‘ œŸœ ŸœŸœ ŸœŸœ˜GLš‘ œŸœ ŸœŸœŸœ ŸœŸœ˜QL˜—š$™$Jš ‘ œŸœ ŸœŸœŸœ˜QOš‘œŸœ ŸœŸœ˜QOš‘œŸœ ŸœŸœ˜RLš ‘œŸœ ŸœŸœ"Ÿœ ˜gLš‘œŸœ Ÿœ%ŸœŸœŸœŸœ˜_Oš ‘ œŸœ ŸœŸœŸœ ˜XLš‘ œŸœ ŸœŸœ˜DJš‘ œŸœ ŸœŸœ˜EL˜—JšŸœ˜J˜—…—°ΰ