Végrehajtása árnyék térképek segítségével shader GLSL

Az elv nagyon egyszerű shader. Minden, ami látható a fényforrás helyzetét, világít, és a többi árnyék.

A működési elve is két részre oszlik:






1. mentése szerkezetmélységet jelenet fényforrás helyzetét. Ez a textúra az úgynevezett árnyék térképet.
2. Render jelenetek árnyékok, kapott adatok felhasználásával az első lépésben.

A példában a két cikk fázis készült külön RenderToShadowMap () és RenderShadowedScene ().

A kiviteli példa két árnyék rendering eltérő végrehajtás fogják használni. változatok különbség az, hogy az első esetben, mi fogja a mélység textúra shader és impozáns árnyékok a helyszínre, hogy csinál egy összehasonlítást kézi textúra. A második esetben, rendering végezzük egyszer a mélység a textúra nélkül árnyékolás a folyamat, és az összehasonlítás összehasonlításával textúra módot, amely megszabadít minket a kezét összehasonlítás a shader.

Az inicializálási és a Shader Model triviális, akkor rendezni őket a saját, tehát nem tudom leírni. De inicializálása textúrák kell részletesen.







Kezdjük figyelembe véve mind az árnyék rendering beállítások:

Opció # 1: csatolása textúrát az FBO mint a szín puffer. A mélysége a tesztet a render puffer.
Ebben az esetben meg kell termelni a mélység bejegyzést a shader. Ráadásul abban a tényben rejlik, hogy tudjuk rögzíteni a mélységet, ahogy szeretnénk. Mi lehet menteni valami mást, amellett, hogy a mélyben, a többi alkatrésze a textúra, ha nincs egyetlen komponens.

Opció # 2: csatolása textúrát az FBO, mint a mélység puffer. színes puffer nem használják.
Itt már nem kell a shader fenntartani mélységben. Egyszerűen teszi a jelenetet.

Mindkét lehetőséget a maga előnye és hátránya.

Inicializálás az opció # 1

Kezdjük az inicializálás az opció # 1. Hozzon létre egy textúra, hogy kell felhelyezni, mint egy színes puffer:

Azt hiszem, ez némi magyarázatra szorul használt textúra formátum.

Kezdjük a biteket. Minél alacsonyabb a bit mélység, annál alacsonyabb a pontosságát. Ezért alacsony bitsebesség, nagyobb figyelmet kell fordítani a vágósík, amire szükség van a közeli és távoli síkon a lehető legközelebb a helyszínre, különösen a szomszéd. Ellenkező esetben akár halált is okozhat kellemetlen leletek hiánya miatt a pontosság. Ebben a példában fogom használni 16 bites. Bár lehet sikereket elérni a 8-bites textúra.

Az utolsó előtti argumentumtípus. a glTexImage2D () függvény. Ez nem a jelen esetben nincs jelentősége, és típusai vannak elrendezve a szépség.

Most hozzon létre egy render-puffer, szükségünk van rá a mélység a teszt:




Kapcsolódó cikkek