This is xform.c in view mode; [Download] [Up]
typedef double point4[4];
typedef double plane4[4];
typedef double matrix4[4][4];
matvecmul4(m,v1,v2)
matrix4 m;
point4 v1,v2;
{
register int i,j,k;
double tmp[4], *tv1, *tv2;
tv1 = (double *) v1;
tv2 = (double *) v2;
for (i=0; i<4; ++i)
for (tmp[i]=0, j = 0; j<4; ++j)
tmp[i] += m[i][j] * tv1[j];
for (i=0; i<4; ++i)
tv2[i] = tmp[i];
}
vecmatmul4(v1,m,v2)
matrix4 m;
point4 v1,v2;
{
register int i,j,k;
double tmp[4], *tv1, *tv2;
tv1 = (double *) v1;
tv2 = (double *) v2;
for (i=0; i<4; ++i)
for (tmp[i]=0, j = 0; j<4; ++j)
tmp[i] += m[j][i] * tv1[j];
for (i=0; i<4; ++i)
tv2[i] = tmp[i];
}
matmatmul4 (mat1, mat2, mat3)
matrix4 mat1, mat2, mat3;
{
register int i, j, k;
double tmp[4];
for (i = 0; i < 4; i++) {
for (j = 0; j < 4; j++) {
tmp[j] = 0.0;
for (k = 0; k < 4; k++) {
tmp[j] += mat1[i][k] * mat2[k][j];
}
mat3[i][j] = tmp[j];
}
}
}
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.