====== Phongův model osvětlení, textury ======
===== Phongův model osvětlení =====
[[wp>Phong reflection model]], [[http://www.root.cz/clanky/pov-ray-a-phonguv-osvetlovaci-model|POV-Ray a Phongův osvětlovací model – Root.cz]]
Osvětlování znamená určování odstínu pixelu na základě normálového vektoru, pozice kamery, světelného zdroje a materiálu. V OpenGL se zapíná pomocí povolení ''GL_LIGHTNING''.
Vektory musí být normalizovány!
{{ http://upload.wikimedia.org/wikipedia/commons/6/6b/Phong_components_version_4.png?600 }}
==== Složky ====
=== Ambient light ===
* Světlost prostředí
* Konstantní, nezáleží na poloze objektu
* //Iₐ// = //kₐLₐ//
* //kₐ// – konstanta materiálu
* //Lₐ// – konstanta světelného zdroje
=== Diffuse light ===
* Rozptýlené světlo materiálem
* Odraz rovnoměrně do všech směrů (záleží jen na náklonu plochy od světelného zdroje – skalární součin vektorů)
* Pozorovatelné na matných površích
* Pro výpočet je použit Lambertův osvětlovací model
* //Id// = //kdLd// (//I// · //n//)
* //kd// – vlastnost materiálu
* //Ld// – konstanta světelného zdroje
* //I// – je osvětlovací vektor
* //n// – normálový vektor
=== Specular light ===
* Odlesk, odraz úzkého svazku paprsků ideálně odražených od povrchu
* //Iₛ// = //kₛLₛ cosᵅ//(//φ//) = //kₛLₛ// (//e// · //r//)//ᵅ//
* //kₛ// – konstanta materiálu
* //Lₛ// – konstanta světelného zdroje
* //α// – //vyleštěnost//, vyšší hodnota dává užší průběh
* //e// – vektor směrem k pozorvateli
* //r// – vektor odraženého světla
==== Materiál ===
Materiál je charakterizován odpovídajícími složkami:
* Ambient
* Diffuse
* Specular
* Emissive (není považován za zdroj, pouze ovlivňuje barvu)
* Vyleštěnost
==== Výpočet ====
* Počítá se pro každou barevnou složku (RGB) zvlášť, kde finální intenzita každé složky je dána součtem: **//Iₐ// + //Id// + //Iₛ//**
* Intenzita z ambientní složky se započítává vždy (všudypřítomné světlo), difuzní a spekulární složky jen pokud není světelný zdroj zastíněn
* Při použití více světel se sčítají jejich jednotlivé vypočítané intenzity
===== Textury =====
[[wp>Texture mapping]]
**Textury** v OpenGL mohou být 1D, 2D i 3D. Pixely textury se nazývají **texely**, tyto se aplikují na povrch objektu. Je zapotřebí asociovat **texturovací souřadnice** s odpovídajícími vrcholy pro správné nanesení textur (definuje programátor, v OpenGl ''glTexCoord''). Algoritmu nanášení textury se pak říká **texturování**.
Je možné využít opakování nebo roztažení v daných směrech. Při texturování může docházet k aliasingu, pokud není dodržen vzorkovací teorém.
==== MIP textury ====
{{ http://upload.wikimedia.org/wikipedia/en/e/ed/Mipmap_illustration2.png?300}}
[[wp>mipmap]]
Multum in Parvo (více v jednom). Několik textur (jedna ve více rozlišeních) je uložena v jedné textuře, vybere se podle vzdálenosti od kamery (LoD). Mimo jiné se tak zabraňuje aliasingu.
//Interpolace// (bilinear, trilinear, anisotropic filtering) MIP textur je důležitá pro neznatelné přechody mezi jednotlivými úrovněmi detailu.
==== Multitexturování ====
Multitexturování umožňuje nanést více textur najednou (např. textura a světelná mapa). Jedná se o rozšíření standardu.
==== Rastrová textura ====
Předem připravený obrázek.
==== Procedurální textura ====
* Není dána rastrem
* Zobrazení do barvy: f(x, z, y) -> C
* Pomalé vyhodnocení, ne všechny povrchy lze matematicky vyjádřit
* Dřevo, mraky, šum apod.
* Hrozba aliasingu, řešení:
* Post-filtering (supersampling)
* Pre-filtering – filtrace ve spojité oblasti (před vzorkováním)
* Stochastické vzorkování
==== Speciální textury====
Bump maps, Environment maps, Normal maps, ...