home *** CD-ROM | disk | FTP | other *** search
- procedure transfer (form:matrixtype;
- var matr:matressa; var matrcnt:integer);
- var
- i,j:integer;
- begin
- matrcnt:= matrcnt + 1; {update the number of matrices}
- move(form,matr[matrcnt],96); {store it in the array}
- end;
-
-
-
- procedure transform (var copy :objectype; data:objectype; action:matrixtype);
- var
- temp : point;
- i,j,k : integer;
- count : integer;
-
- begin
- for count := 1 to copy.pntno do {multiply each point of object}
- begin {with 4X4 transformation matrix}
- fillchar(temp,sizeof(point),char(0));
- for j := 1 to 4 do
- for k := 1 to 4 do
- temp[j] := temp[j] + data.pntlst[count,k] * action[k,j];
- move(temp,copy.pntlst[count],sizeof(temp));
- end;
- copy1.side[1].face[1]^:=copy1.pntlst[1];
- copy1.side[1].face[2]^:=copy1.pntlst[2];
- copy1.side[1].face[3]^:=copy1.pntlst[3];
- copy1.side[1].face[4]^:=copy1.pntlst[4];
-
- copy1.side[2].face[1]^:=copy1.pntlst[2];
- copy1.side[2].face[2]^:=copy1.pntlst[7];
- copy1.side[2].face[3]^:=copy1.pntlst[6];
- copy1.side[2].face[4]^:=copy1.pntlst[3];
-
- copy1.side[3].face[1]^:=copy1.pntlst[3];
- copy1.side[3].face[2]^:=copy1.pntlst[6];
- copy1.side[3].face[3]^:=copy1.pntlst[5];
- copy1.side[3].face[4]^:=copy1.pntlst[4];
-
- copy1.side[4].face[1]^:=copy1.pntlst[1];
- copy1.side[4].face[2]^:=copy1.pntlst[4];
- copy1.side[4].face[3]^:=copy1.pntlst[5];
- copy1.side[4].face[4]^:=copy1.pntlst[8];
-
- copy1.side[5].face[1]^:=copy1.pntlst[8];
- copy1.side[5].face[2]^:=copy1.pntlst[5];
- copy1.side[5].face[3]^:=copy1.pntlst[6];
- copy1.side[5].face[4]^:=copy1.pntlst[7];
-
- copy1.side[6].face[1]^:=copy1.pntlst[1];
- copy1.side[6].face[2]^:=copy1.pntlst[8];
- copy1.side[6].face[3]^:=copy1.pntlst[7];
- copy1.side[6].face[4]^:=copy1.pntlst[2];
-
- end;
-
-
- procedure mult (var matrcnt :integer; var matr:matressa);
-
- var
- temp :array[1..4,1..4] of real;
- i,j,k :integer;
- count : integer;
-
-
- begin
- while matrcnt > 1 do {compress the transformation matrices}
- begin
- fillchar(temp,96,char(0));
- for i := 1 to 4 do
- for j:= 1 to 4 do
- begin
- for k := 1 to 4 do
- temp[i,j] := temp[i,j] + matr[matrcnt-1,i,k] * matr[matrcnt,k,j];
- end;
- matrcnt := matrcnt -1;
- move(temp,matr[matrcnt],96);
- end;
- end;