IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Kaleidoskop (2. část)

...dokončení z minulé lekce

Nyní k obsahu funkce vykreslení prvků pro jeden pohled. Na začátku funkce se nejdříve vymaže kreslicí plocha, což bude oblast o stejných rozměrech jako je maska. Kreslicí plocha začíná na 0 souřadného systému, tedy v levém dolním rohu. Po nastavení indexu prvku na 0 se volají příkazy pro kreslení jednotlivých grafických prvků s různými vstupními parametry, určujícími barvu a rozměry prvků. Před voláním funkce pro kreslení pohledu musí být nastaven požadovaný úhel pohledu (je používán funkcí přípravných výpočtů).

Funkce příprava parametrů pro jeden prvek je, dá se říct, centrálním mozkem programu. Přepočítává animované souřadnice grafického prvku na absolutní souřadnice na displeji, s korekcí podle aktuálního pohledu. Pracuje s prvkem, na nějž aktuálně ukazuje index prvku. Po skončení výpočtu posune ukazatel na následující prvek. Jednotlivé operace jsou rozděleny do skupin. Funkce převede souřadnice středu prvku do polárních souřadnic, otočí souřadnice podle aktuálního úhlu pohledu a převede souřadnice zpět do kartézského systému. Nakonec připraví ještě funkce sin a cos aktuálního úhlu otočení. Funkce používá 2 lokální proměnné (tj. proměnné viditelné pouze uvnitř funkce), úhel prvku a poloměr prvku, které jsou polárními souřadnicemi prvku.

Střed otáčení pohledů leží ve stedu trojúhelníku, ve výšce 1/3 výšky trojúhelníku. Nejdříve se proto převedou souřadnice prvku na střed otáčení soustavy odečtením souřadnice středu otáčení.

K převodu kartézských souřadnic na polární jsou použity funkce vzdálenost bodu (počítá sqrt(x2 + y2)) a úhel bodu (počítá atan2(y, x)).

Po přičtení úhlu pohledu jsou polární souřadnice přepočteny zpět na kartézské, za využití funkcí sin a cos.

Při přepočtu souřadnic zpět na souřadnice okna jsou k souřadnicím prvku přičteny zpět souřadnice středu otáčení pohledu. V případě, že se jedná o levý nebo pravý trojúhelník, je přičtena ještě jednou 1/3 výšky trojúhelníku, protože tyto trojúhelníky jsou jakoby "vzhůru nohama", proto je střed otáčení v jejich horní třetině.

Nakonec jsou předvypočítány hodnoty sin a cos pro transformace vrcholů prvku a to ze součtu úhlu otočení prvku a úhlu pohledu.

Nyní se vrátíme zpět do hlavní smyčky programu, do skupiny pro generování grafiky. Její obsah vidíte na následujícím obrázku. Budeme generovat 3 obrázky, tj. 3 trojúhelníky. Pro první trojúhelník nejdříve nastavíme požadovaný úhel pohledu na 0. Zavoláním funkce vykreslení prvků pro jeden pohled zajistíme vykreslení prvků. Vykreslenou grafiku sejmeme příkazem pro úschovu výřezu z okna a poté výřez zamaskujeme připravenou maskou, čímž ji ořežeme na trojúhelník. Podobně postupujeme i pro ostatní 2 trojúhelníky s tím rozdílem, že zadáváme úhly +60° a

  • 60°, používáme druhou masku a obrázky ještě
horizontálně převrátíme.

Skupina vykreslení kaleidoskopu bude zajišťovat vykreslení připravených obrázků na plochu okna. Postupně vykreslujeme jednotlivé obrázky. Souřadnice Y zůstává u všech obrázků 0, tedy ji nezadáváme. Pro jednotlivé případy použijeme obrázky a souřadnice X podle následující tabulky. Pro přehlednost označíme šířku plochy jako wp, délku strany trojúhelníku jako wt a vertikální převrácení obrázku jako VF.

trojúhelník obrázek souřadnice X
D dole wp/2 - wt/2
L vlevo wp/2 - wt
R vpravo wp/2
LL vpravo VF wp/2 - wt/2 - wt
RR vlevo VF wp/2 + wt/2
LLL dole VF wp/2 - wt - wt
RRR dole VF wp/2 + wt

Po vykreslení jednotlivých trojúhelníků sejmeme spodní polovinu okna, vertikálně ji převrátíme a vykreslíme do horní poloviny okna.

Pokud chcete vyzkoušet meziprodukt programu, máte teď příležitost - měly by se zobrazit náhodné obrazce. Zatím nehybné, ale při každém spuštění programu jiné.

Dostáváme se k poslední skupině hlavní smyčky, posun prvků. Zde budou zajištěny animace kaleidoskopu. Jádrem obsluhy je smyčka, s jejíž pomocí projdeme všechny prvky seznamu prvků.

Při výpočtu nové souřadnice prvku X přičteme k souřadnici rychlost posunu X. Výslednou souřadnici omezíme a to zleva hodnotou -0.5 (povolíme mírný přesah), zprava hodnotou délka strany trojúhelníku. Náhodně změníme rychlost posunu X, výslednou rychlost omezíme na rozsah -0.01+0.01.

Podobně obsloužíme souřadnici prvku Y. Omezení zdola bude hodnotou -0.5, shora hodnotou výška plochy/2. Rychlost posunu Y obsloužíme podobně jako rychlost posunu X.

Nakonec obsloužíme otočení prvku. K otočení prvku přičteme rychlost otáčení. Přičtením konstanty 2*pi posuneme hodnotu do kladných úhlů, abychom následnou operací modulo získali výsledný úhel v rozsahu 02*pi. Nakonec výslednou rychlost otáčení omezíme do intervalu -0.01+0.01.

To jest vše. Pokud jste neudělali nikde chybu, měli byste se dočkat velmi zajímavých obrazců.


 

Stáhnout

Stažením následujícího souboru souhlasíš s licenčními podmínkami

Staženo 182x (134.16 kB)
Aplikace je včetně zdrojových kódů v jazyce Petr Lite (jsou obsaženy v EXE souboru, který lze v programu přímo otevřít)

 

Všechny články v sekci
2D grafika
Článek pro vás napsal Panda38
Avatar
Uživatelské hodnocení:
Ještě nikdo nehodnotil, buď první!
Programátor C++, WinAPI, ASM.
Aktivity