Fade-up: to je můj název pro plynulé zesvětlení palety do bíla - dělá
se naprosto stejně jako fade-in nebo fade-out, jen rovnice na výpočet
jasu je trochu jiná: port[3c9]:=pal[i]+(63-pal[i])*j div 63;
Potom samozřejmě záleží na tom jestli máte cyklus 0 to 63 (z pal do
bíla) nebo 63 downto 0 (z bíla do pal).
Fade-to-pal: Fade z jedné palety do druhé. moje procedurka vypadá asi
takhle:
procedure fadetopal(pal1,pal2:paleta);
var i,j:word;
begin
port[3c8]:=0;
for j:=0 to 63 do
begin
retrace;
for i:=1 to 768 do if pal2[i]>pal1[i] then
port[3c9]:=pal1[i]+(pal2[i]-pal1[i])*j div 63 else
port[3c9]:=pal1[i]-(pal1[i]-pal2[i])*j div 63;
end;
end;
Tato proc. vytváří plynulý přechod mezi pal1 a pal2. Není to nic
těžkého - stačí se nad tím trochu zamyslet.
2. DŮLEŽITÁ POZNÁMKA: při složitějších vzorcích (No to tady budou
asi všechny :)) se celá paleta nestačí za dobu vracení paprsku
naplnit => vzniká nežádoucí "sněžení".. odstranit by se to dalo např.
tak že by v v cyklu for i:=1 to 768 byla kontrola činnosti paprsku.
Fade-to-gray: plynule převede pal do odstínů šedi:
procedure fadetogray(pal:paleta);
var i,j:word;
gray:byte;
begin
port[3c8]:=0;
for j:=63 downto 0 do
begin
retrace;
for i:=1 to 768 do
begin
if (i-1) mod 3=0 then gray:=(pal[i]+pal[i+1]+pal[i+2]) div 3;
if gray>pal[i] then port[3c9]:=gray-(gray-pal[i])*j div 63 else
port[3c9]:=gray+(pal[i]-gray)*j div 63;
end;
end;
end;
Fade-from-gray: oproti fade-to-gray se změní cyklys pro j na for j:=0
to 63 do - toť vše.
Jde v podstatě o to že se vypočítá rozdíl mezi aktuální paletou a
cílovou a ten se po kouscích přičítá k aktuální paletě - až se z ní
stane cílová. Všechny tyto operace s paletou můžete samozřejmě (a
dokonce by mohli i fungovat!) používat i v 16 barevných režimech a v
text. módu. U 16 barev bych doporučoval zkrátit cyklus pro i na 48
(3*16) a u textových to záleží na vás - jestliže např. nepoužíváte
blikavé barvy, stačí cyklus do 384. Dál nezapomeňte že se paleta
musí nastavovat až po inicializaci módu - ta totiž nastaví
standartní paletku. Všechno doporučuju předělat do Assembleru a
zoptimalizovat - tohle co jsem zplodil je příšerná věc :-).
Karak
výheň