next up previous
Next: Omaľovánky alebo "Toto prosím Up: grafika Previous: Už zase začiatok alebo

Čiaročky alebo "Koho si Jááánošííík na paloš načiara..."

V minulej lekcii sme sa naučili, ako naštartovať grafický režim a ako vypísať text na miesto, ktoré si vyberiete. Teraz to bude o tom, ako sa dajú kresliť čiary, čiarky a čiaročky.

Grafický režim sa štartuje príkazom preform set_gfx_mode(GFX_AUTODETECT_FULLSCREEN, 640, 480, 0, 0) Čísla 640 a 480 znamenajú šírku a výšku obrazovky v bodoch. Súčasne s týmto príkazom sa na obrazovke vytvorí súradnicová sústava. Má ale jednu zvláštnosť: bod [0,0] sa nachádza vľavo hore a smerom nadol súradnica y rastie. Teda bod, ktorý sa nachádza na obrazovke vľavo dole má súradnice [0,479]. (Všimnite si, že druhá súradnica je o 1 menšia, než 480!!!) Bod vpravo hore má súradnice [639,0] a aké má súradnice bod vpravo dole, necháme na úvahu láskavého čitateľa. Mimochodom -- aké súradnice má bod v strede obrazovky?

Na kreslenie úsečky slúži funkcia line. Ak chcem napríklad nakresliť na obrazovke zelenú úsečku z bodu [10,40] do bodu [70,20], spravím to príkazom

    line(screen, 10, 40, 70, 20, makecol(0, 255, 0));
Prvý parameter je obrázok, do ktorého budem kresliť (v našom prípade obrazovka). Ďalšie dva parametre určujú súradnice prvého bodu. Nasledujúce dva parametre určujú súradnice druhého bodu a posledný parameter je farba.

Rafinovanejšie použitie tohto príkazu si môžete vyskúšať na nasledujúcom príklade:

 1  #include "allegro.h"
 2
 3  int main()
 4  {
 5     int i;
 6
 7     allegro_init();
 8     install_keyboard(); 
 9
10     set_color_depth(16);
11     if (set_gfx_mode(GFX_AUTODETECT_FULLSCREEN, 640, 480, 0, 0) != 0) {
12        set_gfx_mode(GFX_TEXT, 0, 0, 0, 0);
13        allegro_message("Zlyhala grafika\n%s\n", allegro_error);
14        return 1;
15     }
16
17     clear_to_color(screen, makecol(0, 0, 0));
18
19     for (i = 0; i <= 100; i++)
20        line(screen, 100, 0, 500, 4*i, 
21                       makecol(255 - 2*i, 255 - 2*i, 255));
22
23     readkey();
24     return 0;
25  }
26
27  END_OF_MAIN();

Riadky 1 až 15 sú až na malú výnimku rovnaké ako riadky prvého programu, ktorý pracoval s knižnicou allegro, ktorý sme vyrábali minule. Tou výnimkou je deklarácia premennej i typu int, ktorú budeme potrebovať. Na riadku 17 zafarbíme celú obrazovku na čierno.

Na riadku 19 začína cyklus for, ktorý začína s hodnotou premennej i nula, zakaždým ju zväčší o 1 a beží až dovtedy, kým i neprerastie hodnotu 100. (Koľkokrát cyklus prebehne?) V každom behu cyklu sa zavolá funkcia line, ktorá nakreslí úsečku z bodu [100,0] do bodu [500,4 x i]. Keď má i hodnotu 0, ide o bod [500,0], pri hodnote 1 je to bod [500,4] atď. až pri hodnote 100 sa nakreslí úsečka do bodu [500,400]. Takto v jednom cykle nakreslíme tých úsečiek pomerne dosť.

Premennú i použijeme ešte na inú vec. S jej pomocou budeme meniť farbu. Ak je i rovné nule, farba je makecol(255,255,255), čo je biela. Hodnoty červenej a zelenej však v každom cykle zmenšíme a posledná úsečka sa už bude kresliť farbou makecol(55,55,255), čo je kúsok svetlejšia modrá. A ten pomalý prechod od bielej k modrej je pekný. Však môžete si vyskúšať. Riadky 21 až 25 sú opäť rovnaké ako v prvom programe.

Iný zaujímavý obrázok dostanete ak cyklus na riadkoch 19 až 21 zameníte za cyklus

   for(i = 0; i <= 400; i++)
      line(screen, 100, i, 500, 400-i, makecol(55+i/2,0,0) );
Prečo sa zmenil tvar?

Úlohy na dnes:



Úloha č.1 Napíšte, vyskúšajte a pochopte príklady.

Úloha č.2 Upravte prvý príklad tak, aby sa farba nemenila na modrú, ale na žltú.

Úloha č.3 Nakreslite domček so šikmou strechou.

Úloha č.4 Nakreslite mriežku 8x8 štvorčekov, každý so stranou 10.


next up previous
Next: Omaľovánky alebo "Toto prosím Up: grafika Previous: Už zase začiatok alebo
Anino Belan
anino(at)smnd.sk