home *** CD-ROM | disk | FTP | other *** search
/ Programmer 7500 / MAX_PROGRAMMERS.iso / PASCAL / 3DANIM.ZIP / MATRIX2.PAS < prev    next >
Encoding:
Pascal/Delphi Source File  |  1986-06-28  |  2.4 KB  |  82 lines

  1. procedure transfer    (form:matrixtype;
  2.                        var matr:matressa; var matrcnt:integer);
  3. var
  4.    i,j:integer;
  5. begin
  6.      matrcnt:= matrcnt + 1;            {update the number of matrices}
  7.      move(form,matr[matrcnt],96);      {store it in the array}
  8. end;
  9.  
  10.  
  11.  
  12. procedure transform (var copy :objectype; data:objectype; action:matrixtype);
  13. var
  14.    temp  : point;
  15.    i,j,k : integer;
  16.    count : integer;
  17.  
  18. begin
  19. for count := 1 to copy.pntno do            {multiply each point of object}
  20. begin                                     {with 4X4 transformation matrix}
  21.      fillchar(temp,sizeof(point),char(0));
  22.      for j := 1 to 4 do
  23.      for k := 1 to 4 do
  24.      temp[j] := temp[j] + data.pntlst[count,k] * action[k,j];
  25.      move(temp,copy.pntlst[count],sizeof(temp));
  26. end;
  27.     copy1.side[1].face[1]^:=copy1.pntlst[1];
  28.     copy1.side[1].face[2]^:=copy1.pntlst[2];
  29.     copy1.side[1].face[3]^:=copy1.pntlst[3];
  30.     copy1.side[1].face[4]^:=copy1.pntlst[4];
  31.  
  32.     copy1.side[2].face[1]^:=copy1.pntlst[2];
  33.     copy1.side[2].face[2]^:=copy1.pntlst[7];
  34.     copy1.side[2].face[3]^:=copy1.pntlst[6];
  35.     copy1.side[2].face[4]^:=copy1.pntlst[3];
  36.  
  37.     copy1.side[3].face[1]^:=copy1.pntlst[3];
  38.     copy1.side[3].face[2]^:=copy1.pntlst[6];
  39.     copy1.side[3].face[3]^:=copy1.pntlst[5];
  40.     copy1.side[3].face[4]^:=copy1.pntlst[4];
  41.  
  42.     copy1.side[4].face[1]^:=copy1.pntlst[1];
  43.     copy1.side[4].face[2]^:=copy1.pntlst[4];
  44.     copy1.side[4].face[3]^:=copy1.pntlst[5];
  45.     copy1.side[4].face[4]^:=copy1.pntlst[8];
  46.  
  47.     copy1.side[5].face[1]^:=copy1.pntlst[8];
  48.     copy1.side[5].face[2]^:=copy1.pntlst[5];
  49.     copy1.side[5].face[3]^:=copy1.pntlst[6];
  50.     copy1.side[5].face[4]^:=copy1.pntlst[7];
  51.  
  52.     copy1.side[6].face[1]^:=copy1.pntlst[1];
  53.     copy1.side[6].face[2]^:=copy1.pntlst[8];
  54.     copy1.side[6].face[3]^:=copy1.pntlst[7];
  55.     copy1.side[6].face[4]^:=copy1.pntlst[2];
  56.  
  57. end;
  58.  
  59.  
  60. procedure mult (var matrcnt :integer; var matr:matressa);
  61.  
  62. var
  63.    temp  :array[1..4,1..4] of real;
  64.    i,j,k :integer;
  65.    count : integer;
  66.  
  67.  
  68. begin
  69.    while matrcnt > 1 do                 {compress the transformation matrices}
  70.    begin
  71.      fillchar(temp,96,char(0));
  72.      for i := 1 to 4 do
  73.          for j:= 1  to 4 do
  74.          begin
  75.              for k := 1 to 4 do
  76.              temp[i,j] := temp[i,j] + matr[matrcnt-1,i,k] * matr[matrcnt,k,j];
  77.          end;
  78.      matrcnt := matrcnt -1;
  79.      move(temp,matr[matrcnt],96);
  80.    end;
  81. end;
  82.