TubeRenderImpl.mesa
Copyright © 1985 by Xerox Corporation. All rights reserved.
Bloomenthal, February 24, 1987 6:14:47 pm PST
DIRECTORY Render3d, TubeDefs, TubeMisc, TubeRender;
TubeRenderImpl: CEDAR PROGRAM
IMPORTS Render3d, TubeMisc
EXPORTS TubeRender
~ BEGIN
OPEN TubeDefs;
Type Declarations
RenderStyle:   TYPE ~ Render3d.RenderStyle;
Vertex:    TYPE ~ Render3d.Vertex;
VertexSequence:  TYPE ~ Render3d.VertexSequence;
ShadingSequence: TYPE ~ Render3d.ShadingSequence;
ShadingValue:  TYPE ~ Render3d.ShadingValue;
NatTable:    TYPE ~ Render3d.NatTable;
NatSequence:   TYPE ~ Render3d.NatSequence;
Context3d:   TYPE ~ Render3d.Context3d;
Converting from a Tube
ObjectFromTube: PROC [tube: Tube, matrix: Matrix ← NIL]
RETURNS [
vertices: REF VertexSequence,
shades: REF ShadingSequence,
textures: TripleSequence,
polygons: REF NatTable
] ~ {
Point: PointProc ~ {
vertices[n].x ← position.x;
vertices[n].y ← position.y;
vertices[n].z ← position.z;
shades[n].xn ← normal.x;
shades[n].yn ← normal.y;
shades[n].zn ← normal.z;
textures[n] ← [u, v, 0.0];
n ← n+1;
};
Poly: PolyProc ~ {
polygons[id] ← NEW[NatSequence[3]];
polygons[id].length ← 3;
polygons[id][0] ← p0;
polygons[id][1] ← p1;
polygons[id][2] ← p2;
};
n: INTEGER ← 0;
nPolys: INTEGER ← TubeMisc.NPolys[tube];
nVertices: INTEGER ← TubeMisc.NPoints[tube];
vertices ← NEW[VertexSequence[nVertices]];
shades ← NEW[ShadingSequence[nVertices]];
textures ← NEW[TripleSequenceRep[nVertices]];
polygons ← NEW[NatTable[nPolys]];
polygons.length ← nPolys;
FOR n: NAT IN [0..nVertices) DO
vertices[n] ← NEW[Vertex];
shades[n] ← NEW[ShadingValue];
ENDLOOP;
[] ← TubeMisc.Points[tube, Point, matrix];
[] ← TubeMisc.Polys[tube, Poly];
RETURN[vertices, shades, textures, polygons];
};
AddTube: PUBLIC PROC [
tube: Tube, context3d: Context3d, renderStyle: RenderStyle ← faceted, matrix: Matrix ← NIL]
~ {
vertices: REF VertexSequence;
shades: REF ShadingSequence;
textures: TripleSequence;
polygons: REF NatTable;
[vertices, shades, textures, polygons] ← ObjectFromTube[tube, matrix];
Render3d.AddObject[
context3d, polygons, vertices, shades, textures, , tube.name, renderStyle, TRUE];
};
END.