NAME
    hwIdentity(3), hwScale(3), hwRotateX(3), hwRotateY(3), hwRotateZ(3),
    hwRotateAxis(3), hwMatMult(3), hwTransform(3), hwInvertMat(3)
    - HoverWare matrix utilities

SYNOPSIS
    #include "hw.h"

    void hwIdentity( hwFloat res[4][4] )
    void hwScale( hwFloat res[4][4], hwFloat sx, hwFloat sy, hwFloat sz )
    void hwRotateX( hwFloat res[4][4], hwFloat angle )
    void hwRotateY( hwFloat res[4][4], hwFloat angle )
    void hwRotateZ( hwFloat res[4][4], hwFloat angle )
    void hwRotateAxis( hwFloat res[4][4], hwFloat angle, hwFloat axis[3] )
    void hwMatMult( hwFloat res[4][4], hwFloat a[4][4], hwFloat b[4][4] )
    void hwTransform( hwFloat mat[4][4], hwFloat point[3] )
    hwInt32 hwInvertMat( hwFloat mat[4][4], hwFloat dst[4][4] )

    void hwDisplay->pushMatrix( hwDisplay disp, hwFloat mat[4][4] )
    void hwDisplay->popMatrix( hwDisplay disp )

DESCRIPTION
    These routines manipulate 4x4 transformations useful as modelling
    transforms in HoverWare.  Their full descriptions are as follows:

    hwIdentity		Initialize a 4x4 matrix to "identity".
    hwScale		Place the X, Y, and Z scale factors xs, ys, and
			zs along the diagonal of the matrix
    hwRotateX		Create a matrix which rotates about the X axis
			by angle radians.
    hwRotateY		Create a matrix which rotates about the Y axis
			by angle radians.
    hwRotateZ		Create a matrix which rotates about the Z axis
			by angle radians.
    hwRotateAxis	Create a matrix which rotates about an arbitrary
			axis by angle radians
    hwMatMult		Post-multiply matrix a by matrix b, placing the
			result in res.
    hwTransform		Transform a point by the given matrix
    hwInvertMat		Calculate the inverse of a given mat, putting
			the result in dst.  The return value is 1 if the
			matrix is invertible, 0 otherwise.
    hwDisplay->pushMatrix
			Push a matrix on the HoverWare matrix stack.
			The depth of this stack is system-dependent, but
			it is at least 8.  The matrix is pre-concatenated
			with the other matrices on the stack.
    hwDisplay->popMatrix
			Pop the top of the HoverWare matrix stack.

    The model matrix affects all graphics primitives in HoverWare,
    including cameras and lights.  Note that pushMatrix() and
    popMatrix() are actually methods in the hwDisplay class and need to
    be called through an instance of hwDisplay.

EXAMPLES
    /* Push a rotation about X on the matrix stack */
    hwFloat
	mat[4][4];

    hwRotateX( mat, 30.0 * M_PI / 180.0 );
    disp->pushMatrix( disp, mat );

SEE ALSO
    hwSpinner(3)