OpenGL (17.) - Light mapping - úvod

Light mapping je zdaleka nejpopulárnější způsob jak pracovat se světly. Ve článku nastíním, o co se jedná a jak to pracuje. Také se naučíme něco o OpenGL extensions.

Light mapping není nic víc, než důmyslná forma mapování textur. Místo vykreslení polygonu s běžnou texturou jsou polygony vykresleny se dvěma texturama. První je normální textura, druhá se nazývá light mapa. Light mapa není nic jiného než jiná textura, která reprezentuje intenzitu světla na povrchu polygonu. Podívejte se na příklad:

Kombinace textury a lighmapy.

Obrázek ukazuje jak dokáže kombinace light mapy a normální textury vytvořit napůl osvětlený polygon. Light mapping umožňuje mnohem komplexnější a realističtější stínování, než které standardně nabízí OpenGL. Navíc počet světel ve scéně není omezen (narozdíl od omezení OpenGL osmi světel).

Nyní už víte, co to light mapping je, vše co potřebujete znát je vykreslení polygonu se dvěmi texturami. Existují dvě schůdné možnosti: multitexturing nebo multipass rendering (vícenásobné renderování).

Multitexturing používá k aplikaci dvou textur na jeden polygon multiplicative (vícenásobný) blending. Multipass rendering kreslí polygon dvakrát s jinými texturami. Protože OpenGL nepodporuje multiplicative alpha blending(s alfa kanálem), tak výsledek vypadá mírně odlišně.

Zde jsou dva důvody pro použití multitexturingu místo vícenásobného renderování: Je rychlejší - Polygon není vykreslován dvakrát a většina 3D karet je optimalizována pro multitexturing. Některé karty dokáží aplikovat až čtyři textury naráz, a Vypadá lépe - Srovnejte tyto dva obrázky ze hry Quake2

Substractive blending (nahoře) a Multiplicative blending.

Horní obrázek byl sejmut na Rivě 128. Spodní je vyňat z Voodoo2. Rozdíl je zřejmý - Výstup z Rivy 128 je mnohem tmavší. Můžu si jedině myslet, že Voodoo2 podporuje multitexturing a Riva 128 subtractive alpha blending

Subtractive blending (odečítací) a Multiplicative blending(násobící).

Na obrázku nahoře je rozdíl zřejmý. Obrázek vlevo využil invertované lighmtmapy, kterou odečetl od normální textury, zatímco obrázek vpravo jsme získaly vynásobením light mapy s normální texturou.

A teď jedna špatná zpráva: OpenGL nepodporuje multitexturing. Multitexturing je dostupné pouze jako rozšíření (extension) OpenGL a to znamená, že jej nemusí podporovat všechny grafické karty. V dnešní době již většina karet multitexturing podporuje, ale je třeba si to ohlídat. Je to ale další důvod pro majitele starších karet aby si koupili novou...

Nyní předpokládám, že se chcete dozvědět, jak používat rozšíření OpenGL. Nejdřív navštivte www.opengl.org a stáhněte si specifikace OpenGL extensions. V nich se dozvíte, jaké konstanty a funkce musíte deklarovat k jejich používání. Ty můžete přidat buď přímo do vaší aplikace nebo do hlavičkového souboru opengl.pas. Např. pro multitextury přidejte mimo jiné konstantu GL_MAX_TEXTURE_UNITS_ARB a funkci glMultiTexCoord1fARB(). Také byste měli zkontrolovat, jestli OpenGL podporuje extension, které hodláte používat:

type
  PFNGLMULTITEXCOORD1FARBPROC = procedure(target: TGLenum; s,t : TGLfloat); stdcall;

var
  glMultiTexCoord1fARB : PFNGLMULTITEXCOORD1FARBPROC = nil;

begin
  glMultiTexCoord1fARB:= wglGetProcAddress('glMultiTexCoord1fARB');

Vše je popsáno ve specifikacích OpenGL (ke stáhnutí na www.opengl.org). Teď už můžete používat extensions stejně jako ostatní funkce OpenGL. Pokud máte zkušenosti s použitím klasických textur, tak pro vás určitě nebude používání multitextur příliš složité. Nejdůležitější funkce je glActiveTextureARB(). Tato funkce rozliší, na kterou texturu (normální nebo light mapa) se budou následující příkazy OpenGL vztahovat. Má jediný parametr GL_TEXTUREx_ARB, kde x označuje o kterou texturu se jedná. Po nastavení jedné textuty jí můžete přiřadit texturové koordinace, změnit parametry atd.

Teď už víte, co to light mapping je, proč je tak používaný a jak ho můžeme jednoduše vytvořit s použitím rozšíření OpenGL. Velmi důležitou věcí je zapamatovat si, že ne každá grafárna podporuje používání multitextur. To znamená že když se je rozhodnete používat, měli byste mít alternativu i pro ty, kteří nemají multitexturing nemají (třeba vykreslovat všechny trojúhelníky jen s jednou texturou). Ještě jsem nepsal o jedné věci: jak light mapy vypočítat. Jedná se o rozsálé téma o kterém budu psát v některém z příštích článků.

Vyšlo 02.11.2002, v blogu: 0 1 2 3 4 5 6 7 8

Děkuji, že jste se rozhodl(a) přečíst tento článek. Budu rád i za komentář. Pokud Vás tento článek zaujal a rádi byste jej doporučili ostatním, podpořte mně prosím tím, že věnujete minutku svého času a uděláte mi reklamu na linkuj.cz, vybrali.sme.sk či jagg.cz. Přeji příjemné čtení

Poslední články

Diskuse k blogu

Multi texturing 
Opengl podporuje multi texturing od verze 1.3 a to má dneska i ta nejšitovnější karta. Vlastně multi texturing podporuje i dost starých karet.  
Vložil: (07.07.2008 21:27:39)
Přidání příspěvku
©PC-guru.cz 2000-2008 | Optimalizováno pro 1024*768