home *** CD-ROM | disk | FTP | other *** search
/ PC Interdit / pc-interdit.iso / graph / 3d_light.pas < prev    next >
Pascal/Delphi Source File  |  1994-10-17  |  2KB  |  74 lines

  1. Uses Crt,ModeXLib,Gif,var_3d;
  2.  
  3. Const
  4.     worldlen=8*3; {tableau des points }
  5.     Worldconst:Array[0..worldlen-1] of Integer =
  6.     (-200,-200,-200,
  7.     -200,-200,200,
  8.     -200,200,-200,
  9.     -200,200,200,
  10.     200,-200,-200,
  11.     200,-200,200,
  12.     200,200,-200,
  13.     200,200,200);
  14.     surfclen=38; {tableau des faces }
  15.     surfcconst:Array[0..surfclen-1] of Word=
  16.     ($fee0,4, 0,2,6,4,
  17.      $fec0,4, 0,1,3,2,
  18.      $fec0,4, 4,6,7,5,
  19.      $fee0,4, 1,5,7,3,
  20.      $fec0,4, 2,3,7,6,
  21.      $fec0,4, 0,4,5,1,0,0);
  22.     { $fe = utiliser une source de lumière, couelur de base dans l'octet inférieur }
  23.  
  24. Var
  25.     i,j:Word;
  26.  
  27. Procedure Ombre_Pal; {prépare la palette au dessin des ombres }
  28. Begin
  29.   For j:=192 to 223 do Begin    {traite les couleurs 192 - 223 et 224 - 255 }
  30.     i:=trunc((j/32)*43);        {définit la luminosité }
  31.     Fillchar(Palette[j*3],3,i+20);  {couleurs 192-223 en niveaux de gris }
  32.  
  33.     Palette[(j+32)*3]:=i+20;    {couleurs 224-255 en rouge }
  34.     Palette[(j+32)*3+1]:=0;
  35.     Palette[(j+32)*3+2]:=0;
  36.   End;
  37.   Setpal;                       {réalise la palette }
  38. End;
  39.  
  40. procedure drawworld;external;   {dessine l'espace des objets dans la page d'écran courante }
  41. {$l c:\edition\prog\fr\asm\3dasm.obj}
  42. {$l c:\edition\prog\fr\asm\poly.obj}
  43. {$l c:\edition\prog\fr\asm\bres.obj}
  44. {$l c:\edition\prog\fr\asm\racine.obj}
  45.  
  46. Begin
  47.   vz:=1000; {profondeur de l'objet }
  48.   vpage:=0; {commence en page 0 }
  49.   LoadGif('logor.gif');         {charge l'image de fond }
  50.   init_modex; {enclenche le mode X }
  51.   Ombre_Pal; {calcule la palette des ombres }
  52.   rotx:=0; {valeurs initiales de rotation }
  53.   roty:=0;
  54.   rotz:=0;
  55.   remplir :=true; {remplissage actif }
  56.   su_sort:=true; {tri des faces }
  57.   su_cacher:=true; {traitement des faces cachées}
  58.   verre:=false; {pas d'objet en verre }
  59.   p13_2_modex(16000*2,16000);   {fond d'écran en page 2 de la carte VGA }
  60.   repeat
  61.     CopyScreen(vpage,16000*2);  {fond d'écran en page courante }
  62.     DrawWorld; {dessine l'espace des objets }
  63.     switch; {montre l'image achevée }
  64.     WaitRetrace; {attend le prochain retour de balayage }
  65.     Inc(rotx); {poursuit la rotation ... }
  66.     If rotx=120 Then rotx:=0;
  67.     Inc(rotz);
  68.     If rotz=120 Then rotz:=0;
  69.     inc(roty);
  70.     if roty=120 Then roty:=0;
  71.   Until KeyPressed;             { ...jusqu'à ce qu'on frappe une touche }
  72.   TextMode(3);
  73. End.
  74.