Kaleidoskop (2. část)

Ostatní jazyky Petr Lite 2D grafika 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ženo 180x (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)

 

  Aktivity (1)

Článek pro vás napsal Panda38
Avatar
Programátor C++, WinAPI, ASM.

Jak se ti líbí článek?
Ještě nikdo nehodnotil, buď první!


 


Miniatura
Předchozí článek
Kaleidoskop (1. část)
Miniatura
Všechny články v sekci
2D grafika

 

 

Komentáře

Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zatím nikdo nevložil komentář - buď první!