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: