Stmívání obrazovkyUrčitě to znáte... Většina her při vykreslování obrazovky vás nezatěžuje sledováním toho, jak postupně vykreslují obrazovku. Místo toho se obrazovka zatemní a po vykreslení se ukáže obrazovka v celé kráse najednou. Je to machrovina, která není vůbec náročná na programování. Celý efekt je založen na rychlé změně palety. Každá barva, kterou grafická karta zobrazuje se skládá ze tří barevných složek: R-červená, G-zelená, B-modrá. Poměr hodnot a úroveň jednotlivých složek určuje každou barvu ve spektru. Grafická karta VGA umožňuje určit hodnoty pro každou složku RGB v rozpětí 0-63 (paleta). Z toho vyplývá, že můžeme zobrazit 64*64*64=262144 barev. Problém je, že VGA umožňuje maximálně 256ti barevný režim (něco jiného je SVGA, tam už je i režim se 16ti miliony barev). Přesto si může programátor nastavit hodnoty složek RGB pro každou barvu z 256 (podle režimu). Nastavení se provádí vysláním kódu první zapisované barvy (např. 0) na port $3c8 a vysláním hodnot složek RGB za sebou na port $3c9 pro každou barvu. Naopak čtění se provádí vysláním kódu první čtené barvy na port $3c7 a přečtením hodnot složek všech barev za sebou z portu $3c9. V případě 256ti barevného režimu tedy pracujeme s 256*3=768 hodnotami. Postupné stmívání a rozsvěcení obrazovky se pak provádí poměrným snižováním a zvyšováním hodnot jednotlivých složek všech barev. Protože se při této činnosti provádí mnoho přesunů dat, nabízí se kritické části vytvořit v assembleru. Celý program bych tedy udělal asi následovně:
{$G+}
Protože je mezi jednotlivými kroky změny dost dlouhý delay, můžeme ho v případě, že máme pomalý počítač, trochu snížit. |
|