Two-Sided rajzsablon (Direct3D 9)
Árnyékköteteket használunk árnyékok rajzolásához a rajzsablon pufferével. Az alkalmazás a geometria elzárásával számítja ki az árnyékköteteket a sziluett éleinek számításával, és a fénytől távol 3D kötetek készletére alakítja őket. Ezek a kötetek ezután kétszer jelennek meg a rajzsablon pufferében.
Az első renderelés előre irányuló sokszögeket rajzol, és növeli a rajzsablon pufferértékeit. A második render az árnyékkötet háttérbeli sokszögeit rajzolja meg, és a rajzsablon pufferértékeit dekreálja. Általában az összes növekményes és csökkenő érték megszakítja egymást. A jelenetet azonban már normál geometriával renderelték, így egyes képpontok meghiúsultak a z-pufferteszt során az árnyékkötet renderelése során. A rajzsablon pufferében maradt értékek az árnyékban lévő képpontoknak felelnek meg. Ezeket a rajzsablonpuffer-tartalmakat maszkként használják, hogy egy nagy, mindent magában foglaló fekete quadot belesimítsunk a jelenetbe. Mivel a rajzsablon puffere maszkként működik, az eredmény az árnyékban lévő képpontok sötétítése.
Ez azt jelenti, hogy az árnyékgeometriát fényforrásonként kétszer rajzolják meg, ami nyomást gyakorol a GPU csúcsteljesítményére. A kétoldalas rajzsablon funkció úgy lett kialakítva, hogy enyhítse ezt a helyzetet. Ebben a megközelítésben két rajzsablon-állapot van (alább elnevezve), az egyik az előlapi háromszögekhez, a másik pedig a hátoldali háromszögekhez. Így csak egyetlen áthaladás rajzolódik meg árnyékkötetenként, fényenként.
Az API-módosítások a renderelési állapotok új készletére korlátozódnak. Az új renderelési állapot D3DRS_Two_Sided_StencilMODE a TRUE vagy HAMIS állítható be. Alapértelmezés szerint a FALSE , azaz a jelenlegi (DirectX 8) viselkedést jelenti. Ha ez IGAZ (csak akkor működik, ha D3DSTENCILCAPS_TWOSIDED van beállítva), a következő renderelési állapotok csak az előlapi (óramutató járásával megegyező) háromszögekre lesznek érvényesek.
Renderelési állapot | Leírás |
---|---|
D3DRS_STENCILFAIL | D3DSTENCILOP, ha a rajzsablon tesztelése sikertelen. |
D3DRS_STENCILZFAIL | D3DSTENCILOP, ha a rajzsablon tesztje sikeres, és a z-teszt meghiúsul. |
D3DRS_STENCILPASS | D3DSTENCILOP, ha a rajzsablon és a z-tesztek is sikeresek. |
D3DRS_STENCILFUNC | D3DCMPFUNC fn. A rajzsablon-teszt akkor működik, ha ((maszk &) stencilfn (rajzsablon & maszk)) igaz. |
A renderelési állapotok új készlete a hátoldali (az óramutató járásával ellentétes) háromszögekre vonatkozik.
Renderelési állapot | Leírás |
---|---|
D3DRS_CCW_STENCILFAIL | D3DSTENCILOP, ha a rajzsablon tesztelése sikertelen. |
D3DRS_CCW_STENCILZFAIL | D3DSTENCILOP, ha a rajzsablon tesztje sikeres, és a z-teszt meghiúsul. |
D3DRS_CCW_STENCILPASS | D3DSTENCILOP, ha a rajzsablon és a z-tesztek is sikeresek. |
D3DRS_CCW_STENCILFUNC | D3DCMPFUNC függvény. A rajzsablon-teszt akkor sikeres, ha ((maszk &) stencilfn (rajzsablon & maszk)) igaz. |
A rajzsablon további renderelési állapotai mindig az óramutató járásával megegyező és az óramutató járásával ellentétes irányba mutató háromszögekre is érvényesek.
D3DRS_Two_Sided_StencilMODE a rendszer figyelmen kívül hagyja a vonalak és pont spritesek esetében, ami azt jelenti, hogy a viselkedés nem változik a DirectX 8-hoz képest. A D3DRS_CCW_STENCIL* renderelési állapotok figyelmen kívül lesznek hagyva.
Egy új korlátbit jelzi, hogy az eszköz támogatja-e ezt a funkciót. A funkciót nem támogató illesztőprogramok várhatóan figyelmen kívül hagyják ezeket az új renderelési állapotokat. Az összes többi rajzsablon sapkabitje mindkét rajzsablonpufferelési módra vonatkozik. Mivel Two_Sided_Stencil azt jelenti, hogy D3DCULLMODE_NONE készlettel lehet rajzolni, a megfelelő sapkát az illesztőprogramnak kell beállítania, ha támogatja ezt az új rajzsablon módot. Ezt a Microsoft Windows Hardverminőségi Tesztkörnyezeteknek (WHQL) kell kikényszerítenie.
Új renderelési állapotok:
D3DRS_Two_Sided_StencilMODE // BOOL (default is FALSE)
D3DRS_CCW_STENCILFAIL // Same default as D3DRS_STENCILFAIL
D3DRS_CCW_STENCILZFAIL // Same default as D3DRS_STENCILZFAIL
D3DRS_CCW_STENCILPASS // Same default as D3DRS_STENCILPASS
D3DRS_CCW_STENCILFUNC // Same default as D3DRS_STENCILFUNC
Új sapka:
D3DSTENCILCAPS_TWOSIDED // a flag on D3DCAPS9.StencilCaps
Kapcsolódó témakörök