Direct3D multi-textúrázás

Szia, kedves detishechki 8-)

Az előző leckében megnéztük, hogyan kell dolgozni textúrák Direct3D. Ma úgy véljük, ez lehetőséget a multi-textúrázás. Mi ez? Multitextúrás - szuperpoziciójával több textúrát sokszög. Leggyakrabban ezt a módszert alkalmazzák, hogy szimulálja világítás. Azaz, az előre kiszámított foka megvilágítás egyik vagy másik része a poligonális modell, majd alkotják a besugárzott felületi térképet (fény térkép), amely alkalmazott „felett” alapvető textúra a tárgy, és ezáltal megteremti a hatása nem-egyenletes felületi megvilágítás. Ez a technika sokkal gyorsabb, mint a számítás a világítás „on the fly”, ezért széles körben használják a játékokat. Vannak is sok alkalmazás multitexture például szimulálni bizonyos hatásait. Ebben a leckében megnézzük a szimuláció lefedettség sokszög. Ez a példa az előzőre épül leckét, hogy nem olvasta, azt ajánlom, hogy olvassa el: Direct3D: rusztikálás.

Nos, menjünk!

Kezdjük azzal, hogy én egy kicsit változott a méret a mi vertex, hozzátéve, hogy a paraméter, amely meghatározza a színét. Elvileg ez a művelet nem szükséges, de egy széles területen a kísérletezésre, és elérni szép hatásokat. Vele, meg tudjuk változtatni a színét a „reflektorfényben” (fény). Ezen túlmenően, a végső szín interpoláció útján a színösszetevő az egyes csúcsok. Alapértelmezésben (ha a szín nincs megadva), akkor fehér színű. Most a csúcs formátum a következő:

A második textúra használhatják a textúra koordinátákat, erre szükség van hozzá a leírás a csúcsok egy pár koordinátáit tu és tv, valamint a változás D3DFVF_TEX1 zászló D3DFVF_TEX2. A második textúra koordináták használhatók, például animációs mozgó fényforrás. Ehhez első változatlan marad, és a második változik. Persze, akkor több mint 2 textúrák. Direct3D lehetővé teszi a használatát legfeljebb 8 egyidejű textúrák.

Ezután be kell tölteni egy második textúra. Részletesen a fent leírt intézkedéseket, így nem fogunk lakik ezen a figyelmét.

if (sikertelen (D3DXCreateTextureFromFile (g_pd3dDevice "Spotlight.bmp" g_pSpotLight)))
return false;

struktúra szint (textúra fokozat) végrehajtására használják több állományjavító Direct3D. Mind a nyolc legnagyobb textúrák lehet elhelyezni egy ilyen szinten. Ezt használja SetTexture a következőképpen működik:

Azaz, az első szinten, mi meg az eredeti textúra, míg a második, hogy kerül a tetejére. Az első paraméter az ezt a funkciót csak azt jelzi, a szintek száma, amelyben meg kell, hogy egy textúra.

Ezután be kell állítani a textúra állam. a különféle hatásokat lehet elérni velük. Régebben szinte az alapértelmezett beállításokat, de akkor mindig kísérletezni. Ezután fogom leírni néhány lehetséges állapotok.

Az első sorban mi meg a készlet textúra koordinátákat, amit szeretnénk használni a megfelelő textúra (a textúra határozza meg a szint száma - az első paraméter a funkció). A példánkban használjuk a koordinátákat, így D3DTSS_TEXCOORDINDEX 0-ra állítva A második sorban azt a textúrát szűrési mód. Telepítettem bilineáris szűrés.

Mi nem ugyanaz a dolog a második textúra:

Tekintsük a többi szöveti feltételek:

D3DTSS_COLORARG1 (2) - ezt az állapotot határozza meg az első (második) érv színes textúra szinten a következő értékeket:
- D3DTA_CURRENT - érv textúra - olyan állam, amely megjeleníti a korábbi szinten textúra. Ha ez az első szint egy textúra (0), akkor ez az érv egyenértékű D3DTA_DIFFUSE.
- D3DTA_DIFFUSE - érv textúra - szín interpoláció útján a vertex színeket Gouraud árnyékolás. Ha a csúcsok nem tartalmaz szín komponenst kiválasztott fehér (0xffffff) színű.
- D3DTA_TEXTURE - érv textúra - szín textúra a textúra szinten.

D3DTSS_ALPHAARG1 (2) - meghatározza az első (második) érv textúra alfa szint hozhat a jelentése ugyanaz, mint D3DTSS_COLORARG1 (2). Az alapértelmezett érték - D3DTA_TEXTURE. Ha egy adott szintet textúra nincs telepítve, használt D3DTA_DIFFUSE.

D3DTSS_COLOROP - „ez a feltétel megállapítja, hogy a textúrák lesznek vegyes színű. Lehet hogy a következő értékeket:
- D3DTOP_DISABLE - letiltja a kimenő textúra a jelenlegi szinten (szakasz), és az összes magasabb szinteken. Letiltásához struktúra, ez az érték az első textúra réteg.
- D3DTOP_SELECTARG1 (2) - egy első (második) színes vagy alfa érv fogják használni kimeneti.
- D3DTOP_MODULATE - megsokszorozza a színkomponensei ARG1 és ARG2
- D3DTOP_MODULATE2X (4X) - szaporodik színes alkatrészek és eltolja az eredményt 1 (2) kicsit balra, ami egy szorzás eredményt 2 (4), azaz A kép világosabb lesz.
- D3DTOP_ADD - egészíti színösszetevőinek ARG1 és ARG2
- D3DTOP_SUBTRACT - kapott szín kivonásával kapott második az első érv ARG2 ARG1.

Alapértelmezett D3DTSS_COLOROP az első textúra réteg D3DTOP_MODULATE értéket, és az összes többi D3DTOP_DISABLE.

Ezeken több más államban, akkor olvassa el róluk a részben DirectX8 SDK Help D3DTEXTURESTAGESTATETYPE

Miután az összes ezeket a műveleteket csak felhívják a primitív. Ez történik egy szabványos módon:

Ha helyesen tette, meg kell, hogy az állítólagos kivilágított képzési földre. Itt van az én eredmény:

Direct3D multi-textúrázás

Kapcsolódó cikkek