multitexturing
Biblioteca Direct3D vă permite să suprapuneți nu unul, ci mai multe texturi pe poligon. Impunerea anumitor texturi pe fața se numește multitext. În prezent sunt acceptate până la 8 suprafețe (niveluri) de texturi per față. Schema (principiul) de multitextare poate fi descrisă după cum urmează. Primul nivel de textură (cu indexul 0) preia două valori de intrare: culoarea texelului și culoarea difuză a vârfului; Efectuează aceste operații împreună cu ele și trece rezultatul la nivelul următor (inferior). Valoarea de culoare obținută la nivelul anterior este folosită ca unul dintre argumentele nivelului curent etc. Schematic, acești pași de multitextare pot fi reprezentați după cum urmează:
După cum a devenit clar, cu multitext, cazul are deja mai multe texturi. Cu multitext, puteți atribui aceleași coordonate de textură pentru fiecare nivel de textură. În acest caz, formatul vârfului și setul de steaguri FVF vor rămâne neschimbate. Este posibil să se precizeze cu ce textură se coordonează acest nivel sau acel nivel de textură. Pentru a face acest lucru, puteți utiliza următoarele linii de programe:
De exemplu, pentru a indica faptul că cel de-al doilea nivel va utiliza coordonatele de textură ale primului nivel de textură, este suficient să utilizați următorul apel de metodă: SetTextureStageState (1, D3DTSS_TEXCOORDINDEX, 0). Și apoi trebuie să încărcați (setați) texturile la nivelurile de textura adecvate.
Puteți specifica pentru fiecare nivel de textură propriile coordonate de textură. În acest caz, formatul vârfului ar trebui corect schimbat atunci când descriem și setul de steaguri FVF. Mai jos este un exemplu de descriere a vârfurilor și a steagurilor FVF pentru multitexturi cu două nivele (texturi) și coordonate de textură.
Cu această schemă de tipărire în cascadă, trebuie să setăm două argumente de culoare pentru fiecare nivel de textura și să efectuăm o operație pe ele apelând metoda SetTextureStageState a interfeței IDirect3DDevice9:
În plus față de constantele deja cunoscute pentru argumentele de culoare, constanta D3DTA_CURRENT poate fi utilizată în acest apel. care spune că culoarea de la nivelul texturii anterioare va fi luată drept valoare.
De asemenea, putem specifica tipul necesar de filtrare a texturii pentru fiecare nivel de textură individual, specificând primul său număr ca primul argument și apelând metoda SetSamplerState a interfeței IDirect3DDevice9.
În general, puteți folosi chiar și o textura pentru a implementa mecanismul de multitext. Pentru a face acest lucru, este necesar să încărcați aceeași textura în primul și al doilea nivel de textură, dar coordonatele texturii pentru ele trebuie să difere. Codul pentru acest caz ar putea arăta astfel:
Mai jos este un exemplu de multitextare folosind o singură textură și două nivele de textură.