Textúraburkolás (Direct3D 9)
Röviden, a textúraburkolás megváltoztatja annak alapvető módját, ahogyan a Direct3D a textúrázott sokszögeket raszterizálja, az egyes csúcsokhoz megadott textúrakoordináták használatával. A sokszög raszterizálása közben a rendszer interpolál a sokszög csúcsai közötti anyagminta-koordináták között, hogy meghatározza a sokszög minden képpontjához használandó texeleket. A rendszer általában 2D síkként kezeli az anyagmintát, és az új texeleket interpolálja úgy, hogy a legrövidebb útvonalat az A ponttól a B pontig viszi. Ha az A pont az u, v pozíciót (0,8, 0,1) jelöli, és a B pont a (0.1,0.1) értéknél van, az interpoláció sora az alábbi diagramhoz hasonlóan néz ki.
Vegye figyelembe, hogy az ábrán szereplő A és B közötti legrövidebb távolság nagyjából a textúra közepén fut. Az u-textúra vagy v-textúra koordináta körbefuttatásának engedélyezése megváltoztatja, hogy a Direct3D hogyan érzékeli a legrövidebb útvonalat a textúra koordinátái között az u-irányban és a v-irányban. A textúraburkolás definíciója szerint a raszterizátor a legrövidebb útvonalat veszi át a textúrakoordináta-készletek között, feltéve, hogy a 0.0 és az 1.0 egybeesik. Az utolsó bit a trükkös rész: El tudjuk képzelni, hogy amikor a textúra burkolását engedélyezzük egy irányban, a rendszer úgy kezeli a textúrát, mintha egy henger köré lenne tekerve. Vegyük például az alábbi diagramot.
Az előző ábrán az látható, hogy az u - irányban történő körbefuttatás hogyan befolyásolja, hogy a rendszer hogyan interpolálja a textúra koordinátáit. Ugyanazokat a pontokat használva, mint a normál vagy nem kötött textúrák esetében, láthatja, hogy az A és a B pontok közötti legrövidebb útvonal már nem a textúra közepén van; a 0.0 és az 1.0 együtt létezik a határon. A v irányban történő burkolás hasonló, azzal a kivétellel, hogy a textúrát az oldalán fekvő henger köré burkolja. Az u- és v-irányban történő körbefuttatás összetettebb. Ebben a helyzetben a textúra torusként vagy perecként képzelhető el.
A textúraburkolás leggyakoribb gyakorlati alkalmazása a környezetleképezés végrehajtása. Általában egy környezettérképpel texturált objektum nagyon tükrözöttnek tűnik, és tükrözött képet jelenít meg az objektum környezetéről a jelenetben. A vita kedvéért képzeljen el egy négy falból álló szobát, mindegyik R, G, B, Y betűvel és a megfelelő színekkel: piros, zöld, kék és sárga. Egy ilyen egyszerű helyiség környezeti térképe az alábbi ábrához hasonlóan nézhet ki.
Képzelje el, hogy a szoba mennyezetét egy tökéletesen tükröző, négyoldalas oszlop tartja. A környezettérkép textúrájának leképezése a pillérre egyszerű; azonban elérni, hogy a pillér úgy nézzen ki, mintha tükrözné a betűket és a színeket, már nem olyan könnyű. Az alábbi ábrán az oszlop egy drótkerete látható a felső csúcsok közelében felsorolt megfelelő anyagminta-koordinátákkal. Pontozott vonallal látható az a varrás, ahol a burkolás áthalad a textúra szélein.
Az u-irányban engedélyezve van a burkolás, a texturált oszlop megfelelően jeleníti meg a környezeti térkép színeit és szimbólumait, és a mintázat elején lévő varrásnál a raszterizátor megfelelően választja ki a legrövidebb útvonalat a textúra koordinátái között, feltéve, hogy az u koordináták 0.0 és 1.0 azonos helyen osztoznak. A texturált oszlop az alábbi ábrán látható.
Ha a textúraburkolás nincs engedélyezve, a raszterizátor nem interpolál a hihető, tükröződő kép létrehozásához szükséges irányban. Ehelyett az oszlop elején lévő terület a 0,175 és 0,875 u koordináták közötti texelek vízszintesen tömörített verzióját tartalmazza, miközben áthaladnak a felület középpontján. A burkoló hatás tönkrement.
Textúraburkolás használata
A textúraburkolás engedélyezéséhez hívja meg az IDirect3DDevice9::SetRenderState metódust az alábbi kódpéldában látható módon.
d3dDevice->SetRenderState(D3DRS_WRAP0, D3DWRAPCOORD_0);
A IDirect3DDevice9::SetRenderState által elfogadott első paraméter egy beállítandó renderelési állapot. Adja meg az egyik D3DRS_WRAP0-tól D3DRS_WRAP7-ig terjedő felsorolt értéket, amely meghatározza, hogy melyik textúraszinten állítsa be a tekercset. Adja meg a D3DWRAPCOORD_0-tól D3DWRAPCOORD_3-ig jelzőket a második paraméterben, hogy engedélyezze a textúra körbefuttatását a megfelelő irányban, vagy kombinálja őket, hogy több irányban is lehetővé tegye a körbefuttatást. Ha kihagy egy jelölőt, a megfelelő irányban történő textúraburkolás le van tiltva. Ha le szeretné tiltani a textúra-körbefuttatást a textúrakoordináták halmazában, állítsa a megfelelő renderelési állapot értékét 0-ra.
Ne keverje össze a textúraburkolást a hasonló nevű anyagminta-címzési módokkal. A textúra körbefuttatása a textúra kezelése előtt történik. Győződjön meg arról, hogy a textúraburkoló adatok nem tartalmaznak a [0.0, 1.0] tartományon kívül eső anyagminta-koordinátákat, mert ezek nem definiált eredményeket eredményeznek. A textúracímzéssel kapcsolatos további információkért lásd Textúracímzési módok (Direct3D 9).
Elmozdítási térkép burkolása
Az elmozdítási térképeket a tessellációs motor interpolálja. Mivel a csomagolási mód nem adható meg a tesszellációs motorhoz, a textúra csomagolása nem hajtható végre displacement térképekkel. Egy alkalmazás képes olyan csúcspontok készletét használni, amelyek bármilyen irányba körbefogják az interpolációt. Az alkalmazás egyszerű lineáris interpolációként is megadhatja az interpolációt.
Kapcsolódó témakörök