Ako sa z čísel stane obrázok / Ako funguje rendrovanie v OpenGL
Väčšina hier funguje na princípe takzvaného game-loopu. Je to block inštrukcií, ktoré počítač vykonáva stále dokolečka.
Zvyčajne game-loop vyzerá nasledovne:
- Načítaj vstup od užívateľa (stlačené tlačidlá, pohyb myši, pohyb páčky na ovládači)
- Aktualizuj stav objektov (simulácia fyziky)
- Vyrenderuj scénu (nakresli objekty)
- Choď na krok 1
Pozrime sa teda veľmi zjednodušene1 na to, ako funguje tretí krok v takomto game-loope pri modernom.
Renderovanie začína tým, že definujeme rohy/vrcholy objektu, ktorý chceme nakresliť - tie nazývame vertexy. Ak ideme napríklad kresliť štvorec, potrebujeme aspoň 4 vertexy pretože každý vertex predstavuje jeden vrchol štvorca. Ak ideme kresliť čokoľvek zložitejšie, vertexov budeme potrebovať omnoho viac.
Takisto musíme definovať, čo tieto vrcholy predstavujú. Napríklad to môžu byť body čiary alebo vrcholy trojuholníka alebo vrcholy štvorca. Keďže sa ale zvyčajne používajú trojuholníky, použijeme ich aj my.
Na štvorec ich budeme potrebovať dva. Prvý z nich bude mať vrcholy v bodoch 0, 1 a 2. Druhý bude mať vrcholy v bodoch 2, 1 a 3. Tieto dva trojuholníky vyplnia celú plochu nášho štvorca.
Pre každý vertex potom, spustí grafická karta špeciálny program - vertex shader. Tento program zvyčajne premiestni pomocou rôznych transformačných matíc všetky vertexy jednotlivých objektov na scénu a stará sa napríklad o efekt perspektívy.
Ďalej nasleduje takzvaná rasterizácia. To je proces, pri ktorom sa každý trojuholník rozdelí na konečný počet bodov. Počet týchto bodov je stanovený rozlíšením, obrazovky resp. aplikácie. Čím väčšie rozlíšenie, tým viac bodov. Tieto body nazývame fragmenty.
Následne sa pre každý jeden fragment spustí iný špeciálny program - fragment shader. Tento program určí farbu jednotlivých fragmentov (pixelov na obrazovke). V tomto programe sa zvyčajne počítajú aj veci ako osvetlenie daného objektu, ťiene a odrazy. Tento proces nazývame fragment processing alebo aj shading.
Potom nezostáva už nič iné, iba vyrendrovaný obrázok zobraziť na obrazovke. A potom znova a znova... 60 krát za sekundu.
1. V skutočnosti je proces omnoho zložitejší a obsahuje veľa technických detailov, ktoré sú pre prehľadnosť a jednoduchosť vynechané. Viac informácii o pipeline OpenGL 4.4 je možné nájsť napríklad tu: http://www.seas.upenn.edu/~pcozzi/OpenGLInsights/OpenGL44PipelineMap.pdf ↩