Počítačová grafika

Komprese obrázků

Jelikož rastrový formát obrázku v sobě nese obrovské množství informaci, jsou obrázky veliké. Proto vznikly různé kompresní metody, kterými se velikost obrázku sníží, nejlépe tak aby si lidské oko nevšimlo změny kvality obrázku. Kompresní metody dělíme na:

Číst dál: Komprese obrázků

Polcha *

Rovnice - explicitní  - z = f(x,y) 

implicitní - F(x,y,z)

parametrická - x = fx(u,v), y = fy(u,v), z = fz(u,v). Zadaná vektorově: R(t) = [fx(u,v), fy(u,v), fz(u,v)]

Rozlišujeme několik základních ploch:

  1. Plochy zadané dvěmi okrajovými křivkami
    • Bilineární - dvě křivky proti sobě spojené přímkami
    • Bikubicka - dvě křivky proti sobě spojené polynomem třetího stupně (kubickou funkcí)
  2. Plochy zadané čtyřmi okrajovými křivkami
    • Coonsová bilineární plocha
    • Coonsová bikubická plocha
  3. Plochy zadané body
    • Beziérová plocha
    • Coonsová B-spline plocha
  4. Technické plochy
    • Konoidy - plochy vzniklé spojením dvou křivek přímkami
    • Obálky jednoparamertrických soustav plochy
    • Spádové plochy

Systém barev v počítačové grafice

V počítačové grafice se využívá několik barevných spekter - RGB (pro monitor), HSV a HLS (pro lidi), CMY a CMYK (pro tiskárny).

Číst dál: Systém barev v počítačové grafice

Křivky

Křivka je trajektorie bodu při spojitém pohybu. Je to nekonečná množina bodů závislá na jediném parametru. 

Číst dál: Křivky

Výstupy grafické informace

Grafickou informaci ukládáme ve dvou základních formátech rastrovém a vektorovém. Různé výstupní zařízení pracují s různým formátem obrázku. Monitory a tiskárny, potřebují informaci rastrovou, zatímco plottry vektorovou.

Číst dál: Výstupy grafické informace

Spojitost křivek

Napojení dvou křivek se provádí různými způsoby výsledné spojení nemusí být vždy hladké. V souvislosti s tím existují dvě klasifikace napojeni křivek - C spojitost a G spojitost

C (parametrická) spojitost

C0 - spojité napojení. Koncový bod první křivky a počáteční bod druhé křivky jsou totožné.

Projev v animaci: animovaný objekt nezmění skokem polohu.

C1 - tečné vektory (první derivace) jsou si v bodě spojení rovny.

Projev v animaci: animovaný objekt nezmění skokem směr.

C2 - druhé derivace v bodě spojení jsou si rovny.

Projev v animaci: animovaný objekt nezmění skokem rychlost.

G (geometrická) spojitost

Geometrická spojitost zaručuje totožnost pouze tečen, ne tečných vektorů.

G0 - počáteční a koncový bod je totožný

G1 - tečné vektory jsou lineárně závislé

Oktanové stromy

Je jedna z metod objemového modelování. Těleso je definováno objemovými elemnty (angl. voxel), což je něco 3D pixel. Jde o malé krychličky, na které je rozdělen prostor a které buď jsou v tělese nebo nejsou. 

Číst dál: Oktanové stromy

Projektivní prostor

Projektivní prostor vzniká z potřeby vyrovnat se s nevlastními body (body v nekonečnu) se kterými se špatně počítá. Projektivní prostor využívá homogenních souřadnic

Číst dál: Projektivní prostor

BSP stromy

Při vykreslování objektů v prostoru narazíme na problém co vykreslit dřív a co později, aby to co je blíže pozorovateli překrývalo to co je od něj dál.

Číst dál: BSP stromy

Afinní prostor

Afinní prostor je prostor s body. Dále obsahuje přidruženým vektorový prostor (souřadný systém) pomocí kterého je možné jednotlivé body prostoru zaměřit. Součásti afinního prostoru je také zobrazení, které přiřadí dvojici bodů vektor. 

Číst dál: Afinní prostor

CSG reprezentace tělesa *

Computer Solid Geometry (CSG) je metoda reprezentace těles. Tělesa jsou tvořena za pomocí standardních primitivních těles (kvádr, hranol, válec, kužel, koule, toroid, ...) regularizovaných booloských operací a geometrických transformací.

Číst dál: CSG reprezentace tělesa *

Výpočet osvětlení

Na osvětlení objektu má vliv mnoho faktorů, od úhlů pod kterým světlo na objekt dopadá, přes materiál objektu až po vliv okolí (odražené paprsky od okolních objektů, apod.).

Číst dál: Výpočet osvětlení

Reprezentace tělesa hranici

Metoda reprezentace tělesa pomocí hranice, spočívá v tom, že těleso je dáno svou hranici (povrchem), která je orientována a dělí tedy prostor na dvě části - vnitřek tělesa a vnějšek tělesa.

Číst dál: Reprezentace tělesa hranici

Generování základních grafických prvků v rastrové grafice

I grafické prvky zadané ve vektorovém formátu nakonec potřebujeme vykreslit v rastrové formě. Monitor má omezenou síť pixelů na kterou musíme vektorové zadaný prvek znázornit.

Číst dál: Generování základních grafických prvků v rastrové grafice

Geometrické a objemové modelování *

O modelování těles se starají systémy zvané solid modeler (objektoví modeláři). Základní pojmy :

Číst dál: Geometrické a objemové modelování *

Šrafování a vyplňování oblasti

Pro plné i šrafované vyplňovaní objektu se požívá v podstatě tentýž algoritmus s drobnou obměnou.

K vyplňování (vybarvování) ohraničených ploch se používá semínkové vyplňování. Jednoduchý rekurzivní algoritmus který vždy vybarví okolí bodu a okolí vybarvených bodů, pokud je barva podkladu pořád stejná.

Číst dál: Šrafování a vyplňování oblasti

Open GL *

OpenGL je grafická knihovna pro zobrazování 2D a 3D objektů vyvinutá v 90.letech. Dnes jde o všeobecně uznávaný standard podporován výrobci grafických karet. Standard openGL definuje množinu funkcí, které se volají z programu. Pokud nejsou některé z těchto funkcí podporovány na technické úrovni, je podpora realizována programově, což zajišťujě široké využití i při zachování techniceké nezávislosti programu.

Ukázka funkcí v OpenGL
glColor3f (1.0, 0.0, 0.0);
float color_array[] = {1.0, 0.0, 0.0};
glColor3f color_array; 
glEnable(GL_DEPTH_TEST);
glDisable(GL_DEPTH_TEST);
glGetIntegerv(GL_MAX_LIGHTS, max_pocet_svetel);
glBegin(GL_TRIANGLE_FAN);
  glVertex3f ( 2.0, 2.0, 0.0);
  glVertex3f ( 5.0, 0.0, 1.0);
  glVertex3f ( 6.0, 3.0, 0.0);
  glVertex3f ( 4.0, 4.0, 0.0);
  glVertex3f ( 2.0, 5.0, 0.0);
glEnd();  

OpenGL je jednoduchý, nepodporuje objektový orientované programování. Přesto nabízí široké možnosti a urychluje práci s grafikou. Kromě vykreslování základních typů objektů, umožňuje OpenGL transformace. A to transformace zobrazovací a transformace modelovací. Při těchto transformací se pracuje s transformačními maticemi.

Ořezávání úseček a polygonů

K rychlému ořezání obrazu složeného z úseček a polygonů (mnohoúhelníku složeného z úseček) se používá Cohen - Sutherladův algoritmus. Ten zkontroluje koncové body úseček a přiřadí jim 4-bitový binární kód podle oblasti v které se bod nachází viz. obrázek. Pokud body úsečky mají na stejném místě svého kódu jedničku, pak do ořezu nepatří a dal se neřeší. Pro ostatní přímky se spočítá výřez.

Křivky v počítačové grafice

Pro práci s křivkami v počítačové rafice potřebujeme aby měly tyto vlastnosti :

  • lokalita změn - změna polohy jednoho řídícího bodu křivky se projeví pouze na omezeném úseku křivky.
  • křivka nemusí procházet krajními body řídícího polygonu
  • afinní transformace celé křivky bude mít stejný výsledek jako transformace každého jejího bodu zvlášť
  • křivka leží v konvexní obálce řídícího polynomu

Polynomiální křivky

Vzniknou proložením řídících bodů polynomem obecně n-tého, v praxi však 3tího stupně. V případě že je třeba křivku o více než jedné vlnovce, řeší se to pak interpolací po částech, kdy výslednou křivku poskládáme s více polynomů třetího řádu. Podle toho zda křivka body prochází, nebo se jim jen blíží, můžeme rozdělit polynomiální křivky na:

  • Interpolační polynom - prochází zadanými body. Interpolační křivku vypočteme tak, že zadané body dosadíme do obecných rovnic polynomů, vznikne soustava rovnic, kterou vypočteme konstanty a z obecné rovnice máme konkrétní.

    I když se omezíme na polynom 3 stupně, může se výsledná funkce rozkmitat. To řeší Hermitův polynom, který kromě samotných řídících bodů udává i derivaci v tomto body (směrnici tečny).

  • Aproximační polynom - se přibližuje k daným bodům. Někdy totiž není možné body proložit funkcí, neboť body jsou nad sebou. V takovém případě chceme aby se funkce co nejvíc blížila daným bodům. K tomu se využívá metoda nejmenších čtverců 

Fergusonová křivka

Je dána svými body (P, P1) a tečnými vektory ( T0 , T1 ) v těchto bodech, jenž určují směr křivky. Rovnice Fergunovy křivky pak má tvar:


P(t) = P0F0(t) + P1F1(t) + T0F2(t) + T1F3(t)
,

kde F0, F1, F2, F3 jsou Hermitovské polynomy :

F0(t) = 2t3 − 3t2 + 1
F1(t) = − 2t3 + 3t2
F2(t) = t3 − 2t2 + t
F3(t) = t3 − t2

Navazováním Fergusnových kubik dostaneme kubickou spline křivku, která má parametrickou spojitost prvního řádu.

Spline křivky

Spline křivky jsou poskládáné polynomiální křivky se spojitosti do Cn, kde n je o jedno menší než stupeň polynomů (bo třeba u kubické křivky můžeme dosáhnout max. spojitosti C2, protože víc než 2x nemá cenu kubickou funkci derivovat).

Nejjednoduší spline křivkou je lomená čára.

Beziérová křivka

Beziérovu křivku vymysleli nezávisle na sobě dva francouzští konstruktéři aut. Beziér z Renaultu ji analiticky popsal v roce 1933 a o mnoho let později ji přes geometrickou konstrukci znovu objevil Casteljau matematik Citroenu. 

Beziérová je zadána řídícími body P. Křivka však prochází jen prvním a koncovým bodem a ostatní body tvoří lomenou čáru, která modeluje tvar křivky. V praxi se používá hlavně Beziérová kubika zadána čtyřmi body  P0 -P4 a při více řídících bodech se počítá po častech. Rovnice Bezierovy kubiky má tvar:

P(t) = P0B03(t) + P1B13(t) + P2B23(t) + P3B33(t),

kde bázové funkce B- B4 Bernsteinovy polynomy třetího stupně:

Obecná rovnice Beziérovy křivky

P(t) = P0B0n(t) + P1B1n(t) + ... +PnBnn(t)

Bernsteinovy polynomy se spočtou dle vzorce:

B03(t) = 1 − t2

B13(t) = 3t (1 − t2)

B23(t) = 3t2 (1 − t2

B33(t) = t3 (1 − t2)

Konstrukce Bezierovy křivky

Pro geometrickou konstrukci Beziérovy křivky zvolíme poměr t v kterém dělíme lomenou řídící čáru, jak je vidět na obrázku vpravo, kde je t=0,5

Takto jsme vykreslili první bod křivky P10. Konstrukcí bodu P10 jsme získali nové řídící body, které použijeme pro získání dalších bodů křivky. Další dva body křivky tedy získáme stejným způsobem za použití řídících bodů {P0, P5, P8, P10} a {P10, P9, P7, P4}. Tímto rekurzivním způsobem postupně vykreslíme celou křivku.

Výhoda této konstrukce je, že můžeme ovlivnit hustotu vykreslování dle potřeby. Například v oblasti velkého zakřivení.

Animace beziérovy křivky

Coonsová B-spline křivka


Coonsnova kubika zadána čtyřmi řídícími body 

Coonsnová kubická B-spline křivka vznikne pospojováním Connsnových kubik, tak aby byla zajištěna spojitost druhého řádu.

Coonsnová kubika je parametrická křivka dána čtyřmi body P0, P1, P2, P3 a tímto vztahem:

P(t) = 1/6( P0C0(t) + P1C1(t) + P2C2(t) + P3C3(t) ),

kde bázové funkce jsou:

C0(t) −t3 + 3t2 − 3t + 1
C1(t) = 3t3 − 6t2 + 4
C2(t) = −3t3 + 3t2 + 3t + 1 
C3(t) = t3

B-spline křivky

Podkategorie

Kam dál?