I was living in a basement storeroom with no heat, teaching myself how to program Macintoshes and delivering pizzas for a living. I was driving a car well suited for the job, an 87 Toyota FX-16 G-TS.

This fellow posted on the BMUG bulletin board that he wanted someone to write code for 3D graphics on the Mac.

Being a mathematical genius I saw the challenge and contacted the fellow,

who wanted me to write an app which would, for starters, rotate a cube in the graphics space.

I found a paper on the net by Keith Rollins, of "Macintosh Programming Secrets"

by Knaster and Rollins.

This paper pointed out that points in graphics space must be represented by a 1 by 4 vector.

Operations on that vector then require a 4x4 matrix. Rotation of a set of points comprising an object in the graphics space are effected by constructing a rotation matrix. Translation of a set of points comprising an object can also be effected by constructing a translation matrix.

[space reserved for graphic depicting multiplication of a 1 x 4 vector by a 4 x 4 translation matrix]

I found out the hard way that round off error required one to construct the model of the graphics engine required, or at least was enabled by, a construction of the data model that had the initial point of every object be a permanent record for the life of the process.

For every primitive, or point, in the data set, a translation of an object or rotation of some object or set of objects with respect to some reference plane or axis of rotation, some control by the operator(player of a first person game such as Doom, Marathon or Quake) executed by clicking on a button results in the construction of a rotation matrix. The history of the movements(rotation or translation) is affected by multiplying the current rotation matrix times the product of the rotation matrices of all the previous rotations. At each rendering of the objects in the virtual space the initial co-ordinate vector is operated on by the history matrix, which then produces the current location of the point(object).

The hack, read the disclaimer.