În acest articol, aș dori să iau în considerare un efect remarcabil precum transparența. Există mai multe moduri de a adăuga transparență scenei dvs., ia în considerare mai multe dintre ele. dar puțin mai târziu, la început aș vrea să plec puțin de la subiect și să vă spun despre modul în care a fost scris exemplul, astfel încât mai târziu nu au existat întrebări inutile;)
Pentru a nu deranja scrierea cadrului de aplicare, am folosit D3DFramework, care vine cu DX9SDK și cu care puteți crea cu ușurință aplicații nepretențioase (de exemplu, ale noastre). Am folosit DX9Appwizard pentru a crea cadrul.
Mai mult, din moment ce eu sunt persoana foarte leneș, caseta, care este tras în exemplu, nu am vrut să atragă mânere și utilizate funcția D3DXCreateBox (). Apoi, cu ajutorul CloneMesh () interfață metoda ID3DXMesh am făcut cutia noastră dreapta format nod, de altfel, formatul nod este descris nu de FVF, și cu ajutorul Declarației Vertex (dacă aveți orice întrebări cu privire la acest punct, am întreb pe forum, vorbesc :). Am pictat, de asemenea, pe fundal, astfel încât să puteți vedea în mod clar activitatea uneia sau o altă metodă.
Ca tot ce mi-a spus, acum de fapt la punct !!
Alpha blending este folosit pentru a afișa imagini în care sunt pixeli transparenți sau semi-transparenți. În plus față de componenta de culoare roșie, verde și albastră, fiecare pixel poate avea o componentă "transparentă", cunoscută sub denumirea de canal alfa. Canalul alfa are de obicei același număr de biți ca canalul principal de culoare. De exemplu, un canal alfa pe 8 biți poate avea 256 niveluri de transparență, de la 0 (pixelul este complet transparent) la 255 (pixelul nu este complet transparent).
Pentru a permite amestecarea alfa, în Direct3D trebuie să setați parametrul D3DRS_ALPHABLENDENABLE la TRUE:
În Direct3D, culoarea poate fi specificată utilizând atât un canal alfa (RGBA) cât și un RGB (RGB). Transparența poate fi cuprinsă în noduri, într-un material, într-o textura. De asemenea, puteți utiliza un buffer de cadru pentru a face anumite efecte.
Să luăm în considerare toate aceste metode în detaliu.
Numele metodei vorbește de la sine. Canalul Alpha pe care îl vom păstra în fiecare vârf al obiectului. Pentru a activa această metodă, trebuie să setați parametrul D3DRS_DIFFUSEMATERIALSOURCE în D3DMCS_COLOR1. Prin aceasta, clarificăm faptul că vrem să folosim culoarea din datele vertexului și nu din material.
Să luăm în considerare ce înseamnă acești parametri:
D3DRS_DIFFUSEMATERIALSOURCE - definește sursa culorii pentru calcularea luminii. Pot avea următoarele valori:
D3DMCS_MATERIAL - utilizează culoarea din materialul curent
D3DMCS_COLOR1 - folosește culoarea difuză din vârf
D3DMCS_COLOR2 - utilizează culoarea speculară de la vârf
Implicit este D3DMCS_COLOR1.
De asemenea, trebuie să lăsăm Direct3D să știe că vrem ca culoarea vertex să participe la calculul luminilor. Acest lucru se face după cum urmează:
În principiu, această stare este implicită la TRUE, dar este necesar să pună pe ea orice pompier.
Acum trebuie să adăugăm un canal alfa la fiecare vârf al casetei noastre:
Canalul alfa este dat de prima pereche de numere. Pentru comoditate, puteți utiliza macroul D3DCOLOR_ARGB (alfa, roșu, verde, albastru). Fiecare parametru macro poate avea o valoare între 0 și 255.
Nu voi lua în considerare formatul nodurilor în detaliu, deoarece acest lucru nu corespunde subiectului articolului, dar repet, dacă există întrebări, atunci întreb forumul, voi răspunde cu siguranță.
Asta-i tot, acum, după ce am stabilit stările necesare ale conductei de randare, putem desena caseta noastră:
Iată rezultatul:
Putem defini canalul alfa și în material. Pentru a face acest lucru, creați un material care îl conține:
Pentru a activa metoda, setați D3DRS_DIFFUSEMATERIALSOURCE în D3DMCS_MATERIAL:
Asta e tot. De neuitat pentru a instala materialul nostru, trageți o cutie și vedeți ce sa întâmplat.