Megosztás a következőn keresztül:


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

rajzsablon puffertechnika

D3DRENDERSTATETYPE