home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC Interdit
/
pc-interdit.iso
/
graph
/
3d_light.pas
< prev
next >
Wrap
Pascal/Delphi Source File
|
1994-10-17
|
2KB
|
74 lines
Uses Crt,ModeXLib,Gif,var_3d;
Const
worldlen=8*3; {tableau des points }
Worldconst:Array[0..worldlen-1] of Integer =
(-200,-200,-200,
-200,-200,200,
-200,200,-200,
-200,200,200,
200,-200,-200,
200,-200,200,
200,200,-200,
200,200,200);
surfclen=38; {tableau des faces }
surfcconst:Array[0..surfclen-1] of Word=
($fee0,4, 0,2,6,4,
$fec0,4, 0,1,3,2,
$fec0,4, 4,6,7,5,
$fee0,4, 1,5,7,3,
$fec0,4, 2,3,7,6,
$fec0,4, 0,4,5,1,0,0);
{ $fe = utiliser une source de lumière, couelur de base dans l'octet inférieur }
Var
i,j:Word;
Procedure Ombre_Pal; {prépare la palette au dessin des ombres }
Begin
For j:=192 to 223 do Begin {traite les couleurs 192 - 223 et 224 - 255 }
i:=trunc((j/32)*43); {définit la luminosité }
Fillchar(Palette[j*3],3,i+20); {couleurs 192-223 en niveaux de gris }
Palette[(j+32)*3]:=i+20; {couleurs 224-255 en rouge }
Palette[(j+32)*3+1]:=0;
Palette[(j+32)*3+2]:=0;
End;
Setpal; {réalise la palette }
End;
procedure drawworld;external; {dessine l'espace des objets dans la page d'écran courante }
{$l c:\edition\prog\fr\asm\3dasm.obj}
{$l c:\edition\prog\fr\asm\poly.obj}
{$l c:\edition\prog\fr\asm\bres.obj}
{$l c:\edition\prog\fr\asm\racine.obj}
Begin
vz:=1000; {profondeur de l'objet }
vpage:=0; {commence en page 0 }
LoadGif('logor.gif'); {charge l'image de fond }
init_modex; {enclenche le mode X }
Ombre_Pal; {calcule la palette des ombres }
rotx:=0; {valeurs initiales de rotation }
roty:=0;
rotz:=0;
remplir :=true; {remplissage actif }
su_sort:=true; {tri des faces }
su_cacher:=true; {traitement des faces cachées}
verre:=false; {pas d'objet en verre }
p13_2_modex(16000*2,16000); {fond d'écran en page 2 de la carte VGA }
repeat
CopyScreen(vpage,16000*2); {fond d'écran en page courante }
DrawWorld; {dessine l'espace des objets }
switch; {montre l'image achevée }
WaitRetrace; {attend le prochain retour de balayage }
Inc(rotx); {poursuit la rotation ... }
If rotx=120 Then rotx:=0;
Inc(rotz);
If rotz=120 Then rotz:=0;
inc(roty);
if roty=120 Then roty:=0;
Until KeyPressed; { ...jusqu'à ce qu'on frappe une touche }
TextMode(3);
End.