Abych se priznal, zacinam se v tom ztracet. Jestli jsem to spravne pochopil, pro materialy se zadava: ambientni, difuzni slozka svetla, barva odlesku a faktor odlesku. Pro svetla se zadava to same (nejsem si jisty faktorem odlesku) plus dalsi parametry, ktere jsou zavisle na typu svetelneho zdroje (pozice, smer sireni svetla atd.).
Typ stinovani urcuje, pro co se bude vysledna barva pocitat. Bud muzeme pouzit konstantni (pocita se pro celou plosku) nebo Gouraudovo (pocita se pro vrcholy a na ploskach se interpoluje).
Ted uz zbyvaji jen normaly vrcholu. To jsou normaly na co (neni mi jasny jejich smer vzhledem k plosce)? Domnivam se, ze normala na plosku to byt nemuze, protoze obvykle jeden vrchol patri vice ploskam.
Já myslím, že se v tom neztrácíte, protože jste to shrnul velmi dobře. Takže k tomu stínování:
1. konstantní stínování bere v úvahu pouze normálu zadanou u jednoho vrcholu (u trohúhelníků se jedná vždy o první vrchol, jinde je to trošku složitější). OpenGL resp. grafický akcelerátor vůbec nezajímá, zda se jedná o skutečnou normálu k povrchu nebo je to nějaký vektor zadaný "od oka". Jestliže však chceme, aby bylo těleso správně osvětleno, definujeme normálový vektor korektně.
2. Gouraudovo stínování počítá barvu v každém vrcholu. Proto musí být zadána pro každý vertex normála, ze které se za pomoci Phongova osvětlovacího modelu barva spočítá. Proto se zadávají normály ve vrcholech, i když z geometrického hlediska je to samozřejmě nesmysl. Normály ve vrcholech se spočtou například tak, že se provede součet normalizovaných normál stěn které mají tento vrchol společný. Výsledný vektor se poté znovu normalizuje, takže výsledkem je průměr všech normál stěn se stejným vrcholem. No a následně se provede lin. interpolace mezi barvami vypočtenými ve vrcholech.
Kdyžtak zkusím nakreslit nějaký vysvětlující obrázek a potom zde uvést odkaz.