Module graphics3d - A library for programming simple 3D graphics in occam-pi

A library for programming simple 3D graphics in occam-pi.

This library provides for simple 3D graphics in occam-pi, using simple rasters.

Note: the general [serial] techniques/algorithms used in this library are based on code from lightsrc.cpp and glenz.cpp by Marcus Lindblom.

Index

Declarations

graphics3d.inc:41Constant G3D.MAX.POLY.POINTS

VAL INT G3D.MAX.POLY.POINTS

Maximum number of points in a polygon (see G3D.POLY).

graphics3d.inc:44Constant G3D.MAX.SCAN.HEIGHT

VAL INT G3D.MAX.SCAN.HEIGHT

Maximum height of any particular polygon.

graphics3d.inc:46Group G3D.RENDER.MODE

polygon rendering modes.

graphics3d.inc:47Constant G3D.RENDER.MODE.NONE

VAL INT G3D.RENDER.MODE.NONE

Constant shading.

graphics3d.inc:48Constant G3D.RENDER.MODE.GLENZ

VAL INT G3D.RENDER.MODE.GLENZ

Glenz-effect shading.

graphics3d.inc:49Constant G3D.RENDER.MODE.NORM

VAL INT G3D.RENDER.MODE.NORM

Normal vector based shading.

graphics3d.inc:51Group G3D.ROTATE.MODE

point/polygon rotation modes.

graphics3d.inc:52Constant G3D.ROTATE.MODE.NONE

VAL INT G3D.ROTATE.MODE.NONE

No rotation.

graphics3d.inc:53Constant G3D.ROTATE.MODE.DEMO

VAL INT G3D.ROTATE.MODE.DEMO

Demo-effect rotations.

graphics3d.inc:54Constant G3D.ROTATE.MODE.X

VAL INT G3D.ROTATE.MODE.X

Rotate on X axis.

graphics3d.inc:55Constant G3D.ROTATE.MODE.NX

VAL INT G3D.ROTATE.MODE.NX

Negative rotate on X axis.

graphics3d.inc:56Constant G3D.ROTATE.MODE.Y

VAL INT G3D.ROTATE.MODE.Y

Rotate on Y axis.

graphics3d.inc:57Constant G3D.ROTATE.MODE.NY

VAL INT G3D.ROTATE.MODE.NY

Negative rotate on Y axis.

graphics3d.inc:58Constant G3D.ROTATE.MODE.Z

VAL INT G3D.ROTATE.MODE.Z

Rotate on Z axis.

graphics3d.inc:59Constant G3D.ROTATE.MODE.NZ

VAL INT G3D.ROTATE.MODE.NZ

Negative rotate on Z axis.

graphics3d.inc:65Record G3D.POINT3

DATA TYPE G3D.POINT3

Real point in 3D space (REAL32s).

graphics3d.inc:71Record G3D.POINT2.3

DATA TYPE G3D.POINT2.3

Integer point in 2D space, retains original Z as a REAL32.

graphics3d.inc:78Record G3D.POINT2

DATA TYPE G3D.POINT2

Integer point in 2D space.

graphics3d.inc:85Record G3D.POLY

DATA TYPE G3D.POLY

General polygon in 2D space, retails original Z as REAL32s.

graphics3d.inc:96Record G3D.POLY.SCAN

DATA TYPE G3D.POLY.SCAN

Scan-line converted polygon in 2D space.

graphics3d.inc:109Channel type G3D.TRIG

CHAN TYPE G3D.TRIG

Generator trigger channel-type.

graphics3d.inc:115Protocol G3D.GEN.CONTROL

PROTOCOL G3D.GEN.CONTROL

Polygon points generator control.

graphics3d.inc:117Tag reset

reset

Reset generator to default state.

graphics3d.inc:118Tag add.scale

add.scale; [3]REAL32

Add to the current scale.

graphics3d.inc:119Tag set.scale

set.scale; [3]REAL32

Absolutely set the scale.

graphics3d.inc:120Tag add.trans

add.trans; [3]REAL32

Add to the current translation.

graphics3d.inc:121Tag set.trans

set.trans; [3]REAL32

Absolutely set the translation.

graphics3d.inc:122Tag set.trigger

set.trigger; BOOL; G3D.TRIG?

Set trigger control.

graphics3d.inc:126Protocol G3D.ROT.CONTROL

PROTOCOL G3D.ROT.CONTROL

Points rotation control.

graphics3d.inc:128Tag reset

reset

Reset rotation to default state.

graphics3d.inc:129Tag add.increment

add.increment; REAL32

Add to the increment.

graphics3d.inc:130Tag set.increment

set.increment; REAL32

Absolutely set the increment.

graphics3d.inc:131Tag set.angle

set.angle; REAL32

Absolutely set the angle of rotation.

graphics3d.inc:132Tag set.mode

set.mode; INT

Set the rotation mode (see G3D.ROTATE.MODE).

graphics3d.inc:136Protocol G3D.PRJ.CONTROL

PROTOCOL G3D.PRJ.CONTROL

Polygon points 3D-to-2D projection control.

graphics3d.inc:138Tag reset

reset

Reset projector to default state.

graphics3d.inc:139Tag set.scaling

set.scaling; [2]REAL32

Set 2D scaling.

graphics3d.inc:140Tag set.zdepth

set.zdepth; REAL32

Set Z depth offset (pushes scene away from camera).

graphics3d.inc:141Tag set.2dshift

set.2dshift; [2]INT

Set 2D translation.

graphics3d.inc:142Tag set.3dshift

set.3dshift; [3]REAL32

Set 3D translation (applied before projection).

graphics3d.inc:146Protocol G3D.PGN.CONTROL

PROTOCOL G3D.PGN.CONTROL

Polygon generator control.

graphics3d.inc:148Tag reset

reset

Reset polygon generator to default state.

graphics3d.inc:149Tag set.trimap

set.trimap; BOOL

Generate triangular polygons only.

graphics3d.inc:150Tag set.backfaces

set.backfaces; BOOL

Whether back faces of solid objects should be generated.

graphics3d.inc:151Tag set.face.colour

set.face.colour; INT; INT

Set individual face colour.

graphics3d.inc:152Tag set.face.colours

set.face.colours; MOBILE []INT

Set all face colours.

graphics3d.inc:156Protocol G3D.PSC.CONTROL

PROTOCOL G3D.PSC.CONTROL

Polygon scan-line generator control.

graphics3d.inc:158Tag reset

reset

Resets scan-line generator to default state.

graphics3d.inc:162Protocol G3D.RDR.CONTROL

PROTOCOL G3D.RDR.CONTROL

Polygon render (shader) control.

graphics3d.inc:164Tag reset

reset

Resets shader to default state.

graphics3d.inc:165Tag set.mode

set.mode; INT

Set shader mode (see G3D.RENDER.MODE).

graphics3d.inc:169Protocol G3D.ALL.CONTROL

PROTOCOL G3D.ALL.CONTROL

Overall control for graphics pipeline.

graphics3d.inc:171Tag reset.all

reset.all

Reset all components to default state.

graphics3d.inc:175Protocol G3D.TMR.CONTROL

PROTOCOL G3D.TMR.CONTROL

Graphics pipeline speed control.

graphics3d.inc:177Tag reset

reset

Resets the timer control.

graphics3d.inc:178Tag pause

pause

Pause/unpause the rasters flowing through the network.

graphics3d.inc:179Tag faster

faster

Go faster.

graphics3d.inc:180Tag slower

slower

Go slower.

graphics3d.inc:181Tag set.fps

set.fps; INT

Set frames-per-second absolutely.

rasterutil.occ:30Process raster.buffer

PROC raster.buffer (CHAN RASTER in?, out!)

Simple raster buffer. Basic raster buffer process.

Parameters:

CHAN RASTER in Rasters in
CHAN RASTER out Rasters out

rasterutil.occ:46Process raster.timed.buffer

PROC raster.timed.buffer (CHAN RASTER in?, out!, VAL INT fps, CHAN G3D.TMR.CONTROL ctrl?)

Timed raster buffer. Basic raster buffer process, but limits speed through at specified number of frames-per-second.

Parameters:

CHAN RASTER in Rasters in
CHAN RASTER out Rasters out
VAL INT fps Frames per second
CHAN G3D.TMR.CONTROL ctrl Control channel

rasterutil.occ:104Process raster.fader

PROC raster.fader (CHAN RASTER in?, out!)

Fades rasters. Raster buffer that reduces the colour level of each of the components.

Parameters:

CHAN RASTER in Rasters in
CHAN RASTER out Rasters out

rasterutil.occ:126Process raster.clearer

PROC raster.clearer (CHAN RASTER in?, out!)

Clears rasters. Raster buffer that clears rasters as they go through.

Parameters:

CHAN RASTER in Rasters in
CHAN RASTER out Rasters out

g3dnets.occ:35Process rotate.orchestra1

PROC rotate.orchestra1 (CHAN G3D.ROT.CONTROL rot.out!)

Orchestrates components.

Parameters:

CHAN G3D.ROT.CONTROL rot.out Rotation control out.

g3dnets.occ:71Process planar.path

PROC planar.path (CHAN G3D.PRJ.CONTROL out!, VAL REAL32 xrad, zrad, pangle, iangle, VAL INT islow, VAL [3]REAL32 pos)

Moves a 3D object around a plane following an elliptical path.

Parameters:

CHAN G3D.PRJ.CONTROL out Projection control.
VAL REAL32 xrad X-radius of path.
VAL REAL32 zrad Z-radius of path.
VAL REAL32 pangle Tilt in XY plane of the path.
VAL REAL32 iangle Tilt in XZ plane of the path.
VAL INT islow Slow-down setting
VAL [3]REAL32 pos Initial position.

g3dnets.occ:101Process glenz.network

PROC glenz.network (G3D.RENDER.ENGINE? rlink.in, VAL INT width, height)

Implements a basic "Glenz cube".

Parameters:

G3D.RENDER.ENGINE? rlink.in Render link.
VAL INT width Width of raster.
VAL INT height Height of raster.

g3dnets.occ:137Process glenz.network.spawn

PROC glenz.network.spawn (VAL INT width, height, CHAN G3D.RENDER.ENGINE! new.link!)

Dynamically spawns a new 'glenz.network'.

Parameters:

VAL INT width Raster width.
VAL INT height Raster height.
CHAN G3D.RENDER.ENGINE! new.link Channel to communicate new object link.

g3dnets.occ:153Process glenz.network2

PROC glenz.network2 (G3D.RENDER.ENGINE? rlink.in, VAL INT width, height)

Implements a basic "Glenz cube".

Parameters:

G3D.RENDER.ENGINE? rlink.in Render link.
VAL INT width Width of raster.
VAL INT height Height of raster.

graphics3d.occ:88Process cubepoints.generator

PROC cubepoints.generator (CHAN MOBILE []G3D.POINT3 out!, CHAN G3D.GEN.CONTROL ctrl?)

Cube point generator. Generates a constant stream of points that represent a cube in 3D space.

Parameters:

CHAN MOBILE []G3D.POINT3 out Points generated.
CHAN G3D.GEN.CONTROL ctrl Control channel.

graphics3d.occ:172Process fbypoints.generator

PROC fbypoints.generator (CHAN MOBILE []G3D.POINT3 out!, CHAN G3D.GEN.CONTROL ctrl?)

Inmos butterfly logo generator. The pixel positions were generated by tracing from an Inmos promotional video showing the butterflies running on a Transputer network.

Parameters:

CHAN MOBILE []G3D.POINT3 out Points generated.
CHAN G3D.GEN.CONTROL ctrl Control channel.

graphics3d.occ:371Process points3d.rotate

PROC points3d.rotate (CHAN MOBILE []G3D.POINT3 in?, out!, CHAN G3D.ROT.CONTROL ctrl?)

Point rotator. Rotates an arbitrary set of points around the origin, such that it passes through the same sequence of moves repeatedly (e.g. for a spinning cube). Can also be used for static rotation when set with a zero increment.

Parameters:

CHAN MOBILE []G3D.POINT3 in 3D points in.
CHAN MOBILE []G3D.POINT3 out 3D points out.
CHAN G3D.ROT.CONTROL ctrl Control channel.

graphics3d.occ:501Process points.3d.to.2d3

PROC points.3d.to.2d3 (CHAN MOBILE []G3D.POINT3 in?, CHAN MOBILE []G3D.POINT2.3 out!, CHAN G3D.PRJ.CONTROL ctrl?)

Projects 3D points into 2D, preserves Z information. Maps a set of 3D points down into a set of 2D points, preserving the Z depth information for later operations.

Parameters:

CHAN MOBILE []G3D.POINT3 in 3D points in.
CHAN MOBILE []G3D.POINT2.3 out 2D3 points out.
CHAN G3D.PRJ.CONTROL ctrl Control channel.

graphics3d.occ:753Process cubify.points

PROC cubify.points (CHAN MOBILE []G3D.POINT2.3 in?, CHAN MOBILE []G3D.POLY out!, CHAN G3D.PGN.CONTROL ctrl?)

Generates cube polygons from cube points. Expects to receive 8 points at a time, and from these generates a set of polygons that represent a cube. Characteristics are controllable through the control channel (e.g. skip hidden surfaces).

Parameters:

CHAN MOBILE []G3D.POINT2.3 in Points in (2D with Z-depth).
CHAN MOBILE []G3D.POLY out Polygons out.
CHAN G3D.PGN.CONTROL ctrl Control channel.

graphics3d.occ:773Process flutterby.points

PROC flutterby.points (CHAN MOBILE []G3D.POINT2.3 in?, CHAN MOBILE []G3D.POLY out!, CHAN G3D.PGN.CONTROL ctrl?)

Generates polygons representing the Inmos style butterfly logo. Expects to receive 30 points at a time, and from these generates a set of polygons that represent the butterfly. Only the colour is controllable through the ctrl? channel.

Parameters:

CHAN MOBILE []G3D.POINT2.3 in Points in (2D with Z-depth).
CHAN MOBILE []G3D.POLY out Polygons out.
CHAN G3D.PGN.CONTROL ctrl Control channel.

graphics3d.occ:1013Process poly.scanlines

PROC poly.scanlines (CHAN MOBILE []G3D.POLY in?, CHAN MOBILE []G3D.POLY.SCAN out!, CHAN G3D.PSC.CONTROL ctrl?)

Converts polygons to scan-line data. Expects to receive sets of polygons on its input, which it then transforms into a set of G3D.POLY.SCAN structures.

Parameters:

CHAN MOBILE []G3D.POLY in Polygons input.
CHAN MOBILE []G3D.POLY.SCAN out Scan-line data output.
CHAN G3D.PSC.CONTROL ctrl Control channel.

graphics3d.occ:1300Process render.polyscans

PROC render.polyscans (CHAN MOBILE []G3D.POLY.SCAN data?, G3D.RENDER.ENGINE? rlink.in, CHAN G3D.RDR.CONTROL ctrl?)

Renders polygon scan-line data onto a raster.

Parameters:

CHAN MOBILE []G3D.POLY.SCAN data Polygon scan-line data input.
G3D.RENDER.ENGINE? rlink.in Raster I/O.
CHAN G3D.RDR.CONTROL ctrl Control channel.

graphics3d.occ:1317Process render.polyframe

PROC render.polyframe (CHAN MOBILE []G3D.POLY data?, G3D.RENDER.ENGINE? rlink.in, CHAN G3D.RDR.CONTROL ctrl?)

Renders polygons as a series of lines (wireframe).

Parameters:

CHAN MOBILE []G3D.POLY data Polygons input.
G3D.RENDER.ENGINE? rlink.in Raster I/O.
CHAN G3D.RDR.CONTROL ctrl Control channel.

graphics3d.occ:1540Process raster.chain.head

PROC raster.chain.head (CHAN RASTER in?, G3D.RENDER.ENGINE! head, CHAN G3D.RENDER.ENGINE! new.link?, VAL BOOL fade)

Head of the raster render chain.

Parameters:

CHAN RASTER in Rasters in.
G3D.RENDER.ENGINE! head Head of raster render chain.
CHAN G3D.RENDER.ENGINE! new.link Channel on which new rendering engines are added.
VAL BOOL fade Whether to fade (TRUE) or clear (FALSE) rasters.

graphics3d.occ:1582Process raster.chain.tail

PROC raster.chain.tail (CHAN RASTER out!, G3D.RENDER.ENGINE? tail)

Tail of the raster render chain.

Parameters:

CHAN RASTER out Rasters out.
G3D.RENDER.ENGINE? tail Tail of raster render chain.

graphics3d.occ:1603Process raster.chain

PROC raster.chain (CHAN RASTER in?, out!, CHAN G3D.RENDER.ENGINE! new.link?, VAL BOOL fade)

Implements raster render chain.

Parameters:

CHAN RASTER in Rasters in.
CHAN RASTER out Rasters out.
CHAN G3D.RENDER.ENGINE! new.link Channel on which new rendering engines are added.
VAL BOOL fade Whether to fade (TRUE) or clear (FALSE) rasters.

g3dutil.occ:32Process g3d.point3.delta

PROC g3d.point3.delta (CHAN MOBILE []G3D.POINT3 in?, out.0!, out.1!)

Delta for mobile arrays of the G3D.POINT3 type.

Parameters:

CHAN MOBILE []G3D.POINT3 in Points in.
CHAN MOBILE []G3D.POINT3 out.0 Points out.
CHAN MOBILE []G3D.POINT3 out.1 Points out.

g3dutil.occ:49Process g3d.point2.3.delta

PROC g3d.point2.3.delta (CHAN MOBILE []G3D.POINT2.3 in?, out.0!, out.1!)

Delta for mobile arrays of the G3D.POINT2.3 type.

Parameters:

CHAN MOBILE []G3D.POINT2.3 in Points in.
CHAN MOBILE []G3D.POINT2.3 out.0 Points out.
CHAN MOBILE []G3D.POINT2.3 out.1 Points out.

g3dutil.occ:65Process g3d.point2.delta

PROC g3d.point2.delta (CHAN MOBILE []G3D.POINT2 in?, out.0!, out.1!)

Delta for mobile arrays of the G3D.POINT2 type.

Parameters:

CHAN MOBILE []G3D.POINT2 in Points in.
CHAN MOBILE []G3D.POINT2 out.0 Points out.
CHAN MOBILE []G3D.POINT2 out.1 Points out.

g3dutil.occ:81Process g3d.poly.delta

PROC g3d.poly.delta (CHAN MOBILE []G3D.POLY in?, out.0!, out.1!)

Delta for mobile arrays of the G3D.POLY type.

Parameters:

CHAN MOBILE []G3D.POLY in Polygons in.
CHAN MOBILE []G3D.POLY out.0 Polygons out.
CHAN MOBILE []G3D.POLY out.1 Polygons out.

g3dutil.occ:97Process g3d.poly.scan.delta

PROC g3d.poly.scan.delta (CHAN MOBILE []G3D.POLY.SCAN in?, out.0!, out.1!)

Delta for mobile arrays of the G3D.POLY.SCAN type.

Parameters:

CHAN MOBILE []G3D.POLY.SCAN in Polygon scans in.
CHAN MOBILE []G3D.POLY.SCAN out.0 Polygon scans out.
CHAN MOBILE []G3D.POLY.SCAN out.1 Polygon scans out.

g3dutil.occ:114Process g3d.gen.control.delta

PROC g3d.gen.control.delta (CHAN G3D.GEN.CONTROL in?, out.0!, out.1!)

Delta for G3D.GEN.CONTROL protocol.

Parameters:

CHAN G3D.GEN.CONTROL in Commands in.
CHAN G3D.GEN.CONTROL out.0 Commands out.
CHAN G3D.GEN.CONTROL out.1 Commands out.

g3dutil.occ:161Process g3d.rot.control.delta

PROC g3d.rot.control.delta (CHAN G3D.ROT.CONTROL in?, out.0!, out.1!)

Delta for G3D.ROT.CONTROL protocol.

Parameters:

CHAN G3D.ROT.CONTROL in Commands in.
CHAN G3D.ROT.CONTROL out.0 Commands out.
CHAN G3D.ROT.CONTROL out.1 Commands out.

g3dutil.occ:197Process g3d.prj.control.delta

PROC g3d.prj.control.delta (CHAN G3D.PRJ.CONTROL in?, out.0!, out.1!)

Delta for G3D.PRJ.CONTROL protocol.

Parameters:

CHAN G3D.PRJ.CONTROL in Commands in.
CHAN G3D.PRJ.CONTROL out.0 Commands out.
CHAN G3D.PRJ.CONTROL out.1 Commands out.

g3dutil.occ:233Process g3d.pgn.control.delta

PROC g3d.pgn.control.delta (CHAN G3D.PGN.CONTROL in?, out.0!, out.1!)

Delta for G3D.PGN.CONTROL protocol.

Parameters:

CHAN G3D.PGN.CONTROL in Commands in.
CHAN G3D.PGN.CONTROL out.0 Commands out.
CHAN G3D.PGN.CONTROL out.1 Commands out.

g3dutil.occ:269Process g3d.psc.control.delta

PROC g3d.psc.control.delta (CHAN G3D.PSC.CONTROL in?, out.0!, out.1!)

Delta for G3D.PSC.CONTROL protocol.

Parameters:

CHAN G3D.PSC.CONTROL in Commands in.
CHAN G3D.PSC.CONTROL out.0 Commands out.
CHAN G3D.PSC.CONTROL out.1 Commands out.

g3dutil.occ:285Process g3d.rdr.control.delta

PROC g3d.rdr.control.delta (CHAN G3D.RDR.CONTROL in?, out.0!, out.1!)

Delta for G3D.RDR.CONTROL protocol.

Parameters:

CHAN G3D.RDR.CONTROL in Commands in.
CHAN G3D.RDR.CONTROL out.0 Commands out.
CHAN G3D.RDR.CONTROL out.1 Commands out.