RGB kocka


Abstract

The 'RGB kocka' is a program which paints the cube colored with RGB colour model on the screen. The painted cube can be transformed on the screen by use of the homogenous transformations and the image of the cube can be saved in a .BMP file.

Splo©en opis programa

Kaj je RGB kocka?

RGB kocka je program, ki na zaslonu prika¾e kocko pobarvano z RGB barvnim modelom. Kocko lahko po zaslonu rotiramo, transliramo in skaliramo. Opisane operacije izvajamo s homogenimi transformacijami.

RGB barvni model se uporablja za prikaz slik na monitorju. Vsaka toèka na ekranu monitorja (pixel) je popisana z RGB barvnim modelom, in sicer se v RGB barvnem modelu popi¹e barva z intenzivnostjo posameznih barv na zaslonu(R-rdeèe, G-zelene, B-modre). Intenzivnost posamezne barve je celo ¹tevilo od 0 do 255. Npr. bela barva je popisana z RGB kot R=255;G=255;B=255, èrna barva pa kot R=0;G=0;B=0. ©tevilo vseh barv, ki sestavljajo RGB barvni model je 16,7 milijona.

Vse barve RGB barvnega modela najla¾je predstavimo s kocko. Na vsako os kocke nana¹amo svojo barvo.

Opis grafiènih objektov v raèunalni¹tvu

Vsak grafièni objekt je v raèunalniku popisan z vektorskim ali pa z rasterskim opisom. V nadaljevanju bo opisan le vektorski naèin popisa objektov.

Karakteristiène toèke objekta(pravokotnik-oglji¹èa,daljica-zaèetna in konèna toèka) so popisane s ¹tirimi koordinatami (X Y Z W), ki tvorijo homogen prostor. Prve tri koordinate podajajo hkrati polo¾aj objekta v globalnem(World) koordinatnem sistemu, èetrta koordinata W pa je zato, da omogoèa uporabo homogenih transformacij nad objektom in je v raèunalni¹ki grafiki vedno W=1. Nad objektom, ki je popisan s homogenimi koordinatami lahko uporabljamo homogene transformacije.

V opisanem programu imamo opravka le z enim objektom, to je kocko. Kocka je popisana z osmimi toèkami(oglji¹èi). Pri homogenih transformacijah se transformirajo le karakteristiène toèke kocke(oglji¹èa), toèke na ploskvah kocke, ki so potrebne za prikaz na zaslonu pa se doloèijo z interpolacijo, kar pa je opisano pod poglavjem algoritem delovanja programa.

Homogene transformacije

Namen

Homogene transformacije uporabljamo v raèunalni¹ki grafiki za transformiranje grafiènih objektov. Znaèilnost homogenih transformacij je, da ohranjajo kote(obliko objekta), spreminjajo pa mu lahko velikost in polo¾aj na zaslonu ali kak¹ni drugi izhodni napravi. Osnovne homogene transformacije so rotacija, translacija in skaliranje, nad objektom pa jih lahko izvajamo le èe je popisan v homogenem prostoru. V nadaljevanju so napisane transformacijske matrike, ki veljajo le èe je karakteristièna toèka(npr. toèka okoli katere transliramo objekt) v izhodi¹èu.

Uporaba

Uporabljamo jih tako, da pomno¾imo vsako toèko objekta (Ui) s transformacijsko matriko(V). Produkt opisanega matriènega mno¾enja je nova transformirana toèka Bi.

Bi=Ui>× V

Transformacijske matrike za posamezne homogene transformacije so:

· skaliranje
· rotiracija
· translacija

 

 

 

Skaliranje

 Sx

0

0

0

0

Sy

0

0

0

0

Sz

0

0

0

0

1

Sx, Sy, Sz so faktorji poveèave ali pomanj¹ave objekta v ustrezni osi

Rotacija

Rotacija okoli z osi za kot fi:

 Cos(fi)

Sin(fi)

0

0

-Sin(fi)

Cos(fi)

0

0

0

0

1

0

0

0

0

1

Rotacija okoli x osi za kot fi:

1

0

0

0

0

Cos(fi)

Sin(fi)

0

0

-Sin(fi)

Cos(fi)

0

0

0

0

1

Rotacija okoli y osi za kot fi:

Cos(fi)

0

-Sin(fi)

0

0

1

0

0

Sin(fi)

0

Cos(fi)

0

0

0

0

1

Translacija

1

0

0

0

0

1

0

0

0

0

1

0

Tx

Ty

Tz

1

Tx, Ty, Tz so razdalje za katere se objekt translira

Tvorba slike na zaslonu

Transformacija iz homogenega v View koordinatni sistem

Objekt popisan s homogenimi koordinatami ¹e ni primeren za prikaz na zaslonu, ker ne popisuje toèke iz katere uporabnik opazuje objekt, zato je potrebno vsako toèko objekta transformirati iz homogenega koordinatnega sistema v vidni ali View koordinatni sistem.

Obstaja veè vrst View koordinatnih sistemov. V nalogi je bil uporabljen krogelni View koordinatni sistem. V View koordinatnem sistemu se definira toèka iz katere uporabnik gleda na objekt(gledi¹èe). Gledi¹èe je popisano s tremi koordinatami, in sicer odaljenostjo od izhodi¹èa in dvema kotoma.

Toèko transformiramo iz homogenega koordinatnega sistema v View koordinatni sistem tako, da vsako toèko(Bi), ki popisuje objekt v homogenem koordinatnem sistemu pomno¾imo z view(W) matriko. Rezultat so toèke objekta(Ti) zapisane v View koordinatnem sistemu.

Ti=Bi× W

View matrika, ki popisuje gledi¾èe v krogelnem koordinatnem sistemu je:

-Sin(fi)

-Cos(fi)× Cos(q)

-Cos(fi)× Sin(q)

0

Cos(fi)

-Sin(fi)× Cos(q)

-Sin(fi)× Sin(q)

0

0

Sin(q)

-Cos(q)

0

0

0

d

1

Kota q in fi sta merjena od osi z in x, d pa je odaljenost gledi¾èa od izhodi¹èa View koordinatnega sistema.

Transformacija iz View v Screen koordinatni sistem

Za prikaz slike na zaslonu potrebujemo le dve neodvisni koordinati in ne tri kot jih imamo pri opisu toèke v View koordinatnem sistemu. Toèko moramo zato transformirati iz View v zaslonski ali Screen koordinatni sistem. To storimo tako, da pomno¾imo vse toèke objekta zapisane v View koordinatnem sistemu s Screen transformacijsko matriko(SC).

Zi=Ti× SC

Screen matrika ima obliko:

1

0

0

0

0

1

0

0

0

0

0

0

0

0

0

1

Po matriènem mno¾enju dobimo toèko Zi, ki pa je ¾e primerna za prikaz na ekranu.

Algoritem delovanja programa

Program je napisan v C jeziku za Windows okolje, kar pomeni da je dogodkovno krmiljen. Algoritem izvajanja programa od zagona programa pa do zakljuèka dela s programom je:

  1. deklaracija glavnega razreda oken
  2. inicijalizacija paramterov kocke(dol¾ina stranic, odaljenost gledi¹èa od koordinatnega izhodisca, postavitev vrednosti Screen,View,translacijske, rotacijskih in skalirne matrik, nastavitev paramterov, ki doloèajo naèin prikaza kocke(¾ièni model ali pobarvana kocka) in shranjevanje. Objekt (kocka) je popisan v homogenih koordinatah z osmimi toèkami (oglji¹èa).
  3. Zagon while zanke, ki obdeluje sporoèila poslana aplikaciji v èasu delovanja aplikacije
  4. Izloèitev sporoèil, ki so zanimive za aplikacijo-sporoèila od uporabnika, ki so poslana od menujev, tipkovnice ali mi¹ke in sporoèila operacijskega sistema, ki so poslana aplikaciji:
  5. Ukaz za translacijo kocke

    -Izraèun translacijskega vektorja(ob vsakem pritisku uporabnika na smerno tipko se pomakne kocka za 5 pixlov v ustrezni smeri)

    -Procedura nastavi translatorno matriko

    -nadaljevanje na toèki 5.

    Ukaz za rotacijo kocke

    -Izraèun kota rotacije(ob vsakem pritisku uporabnika na funkcijsko tipko(F5 ali F6 ali F7)se kocka zarotira za 10* okoli ustrezne osi) in zapis v strukturo koti

    -Procedura nastavi rotacijske matrike

    -nadaljevanje na tocki 5.

    Ukaz za skaliranje kocke

    -Izraèun skalirnega faktorja(ob vsakem pritisku uporabnika na funkcijsko tipko(F2 ali F3)se kocka zmanj¹a ali poveèa za 20%) in zapis v

    -Procedura nastavi skalirno matriko

    -nadaljevanje na tocki 5.

    Ukaz, ki doloèa naèin prikaza kocke

    -Ukaz spro¾i uporabnik z izbiro ustrezne opcije v menuju.

    -Kocka je lahko na ekranu prikazana kot ¾ièni model ali pa kot polno telo(solid). Kadar je vkljuèen ¾ièni prikaz kocke je mo¾no kocko na ekranu transformirati, ni pa mo¾no shranjevanje kocke v datoteko. Shranjevanje kocke v datoteko in prikaz RGB barvnega modela na zaslonu je mogoèe kadar je vkljuèen solid naèin prikaza kocke. Za ¾ièni model se algoritem nadaljuje na toèki 9.0.,za solid model pa na toèki 10.0.

    Ukaz za shranjevanje kocke

    Ukaz spro¾i uporabnik z izbiro ustrezne opcije v menuju.
    Smiselno ga je uporabljati le kadar je na zaslonu prikazana pobarvana kocka, ne pa ¾ièni model kocke.
    Potem ko aplikacija sprejme to sporoèilo zahteva od uporabnika da definira z mi¹ko polje shranjevanja. Polje shranjevanja definira z vleèenjem mi¹ke. Sporoèila, ki jih prejme program od uporabnika so WM_LBUTTONDOWN za pritisk levega gumba mi¹ke, WM_MOUSEMOVE pri premikanju mi¹ke in WM_LBUTTONUP kadar uporabnik spusti levi gumb mi¹ke. Potem ko uporabnik definira polje shranjevanja se na zaslonu izri¹e pobarvana kocka(solid naèin dela), opis algoritma se nadaljuje na toèki 11.0.

    Ukaz za izhod iz programa

    Ukaz spro¾i uporabnik z izbiro ustrezne opcije v menuju.
    V trenutku ko prejme program sporoèilo za izhod iz programa, program opomne uporabnika, da ¹e ni shranil kocke. Èe uporabnik izbere shranjevanje kocke se izvr¹i ukaz za shranjevanje kocka, sicer pa se program konèa.

  6. pomno¾i vse karakteristiène toèke kocke z ustreznimi transformacijskimi matrikami
  7. Transformacija vseh toèk iz World v View koordinatni sistem
  8. Transformacija vseh toèk iz View v Screen koordinatni sistem
  9. Za vsako ploskev kocke doloèi ali je ploskev vidna ali ne. pogoj za vidnost je da je skalarni produkt med normalo ploskve in vektorem, ki definira pogled uporabnika na kocko(0,0,1) veèji od niè.
    Vidnost ali nevidnost ploskev se zapi¹e v posebno matriko, ki se pozneje uporabi pri prikazu kocke na zaslonu.
  10. Èe je vkljuèen ¾ièni prikaz kocke se na zaslonu nari¹ejo vse vidne stranice kocke. Program se nadaljuje na toèki 4.0., kjer program prejme novo sporoèilo in ga obdela.
  11. Èe je vkljuèen prikaz pobarvane kocke se na ekran nari¹ejo vidne ploskve kocke, ki so pobarvane z ustreznimi RGB barvami. Ker pa monitor prikazuje pobarvano kocko s Pixli, spremenjljivke pa vsebujejo le podatke o kocki v oglji¹èih(barva, polo¾aj) so vmesne toèke kocke doloèene z interpolacijo. Potem ko je na zaslonu narisana pobarvana kocka se program nadaljuje na toèki 4.0., kjer program prejme novo sporoèilo in ga obdela.
  12. Shranjevanje kocke-uporabnik je ¾e definiral polje shranjevanja kocke, naslednji korak je prikaz pobarvane kocke na monitorju, ki je opisano pod toèko 10.0. Po prikazu pobarvane kocke na zaslonu odpre program datoteko v katero bo shranil kocko, sledi branje barv posameznih pixlov z zaslona in zapis barv Pixlov v datoteko. Po konèenem zapisu barv Pixlov v datoteko program zapre datoteko in se nadaljuje na toèki 4.0., kjer prejme novo sporoèilo in ga obdela.

Uporaba programa

Potem, ko se program za¾ene z zagonom izvr¹ne datoteke 'rgb_koc.exe' se na zaslonu prika¾e ¾ièni model kocke. Pomoc o delu s programom se lahko za¾ene z izbiro opcije 'Splosno' v menuju 'Pomoc' ali preko tipkovnice s tipkami ALT+O +S.

Transformacija kocke na zaslonu

Kot je bilo opisano v poglavju, ki opisuje algoritem delovanja programa lahko nad ¾iènim modelom kocke uporabljamo homogene transformacije za transformacijo kocke po zaslonu. Nad kocko izvajamo homogene transformacije z naslednjimi funkcijskimi tipkami:

F2 ...poveèevanje kocke na zaslonu

F3 ...zmanj¹evanje kocke na zaslonu

F5 ...rotacija kocke okoli +x osi

CTRL+F5 ... rotacija kocke okoli -x osi

F6 ... rotacija kocke okoli +y osi

CTRL+F6 ... rotacija kocke okoli -y osi

F7 ... rotacija kocke okoli +z osi

CTRL+F7 ... rotacija kocke okoli -z osi

SMERNE TIPKE ... translacija kocke po zaslonu

Barvanje kocke z RGB barvnim modelom

Potem, ko je uporabnik zadovoljen z velikostjo in polo¾ajem ¾iène kocke na zaslonu lahko pobarva ¾ièno kocko z RGB barvnim modelom tako, da v menuju datoteke izbere opcijo 'Barvana kocka'. Pobarvane kocke ni veè mozno spreminjati s homogenimi transformacijami.

Shranjevanje kocke

Kocko se lahko shrani v datoteko .BMP formata z izbiro opcije 'Shranjevanje' v menuju 'datoteke'. Po izbiri opisane opcije program zahteva od uporabnika da definira z mi¹ko podroèje shranjevanja.

Podroèje shranjevanja se definira tako, da se kazalec mi¹ke premakne v zgornji levi vogal kvadrata, ki bo definiral polje shranjevanja, pritisne levi gumb na mi¹ki, povleèe mi¹ko v spodnji desni vogal kvadrata, ki definira polje shranjevanja in spusti levi gumb na mi¹ki.

Program zastavi ¹e nekaj vpra¹anj in èe so odgovori na vpra¹anja pritrdilni se shrani vsebina definiranega polja shranjevanja v datoteko 'rgb_koc.bmp'. Datoteka se lahko pregleduje in popravlja z veèino programov za grafièno oblikovanje pod Windowsi.


Matija BARLE
Fakulteta za strojni¹tvo
Ljubljana
e-mail:matija.barle@kiss.uni-lj.si