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


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.

két pont közötti interpolációs vonal diagramja

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.

anyagmintát és két pontot ábrázoló diagram egy henger körül

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.

a piros, zöld, kék és sárga csíkok függőleges illusztrációja

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.

téglalap diagramja egy kettéosztó pontozott vonallal

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ó.

piros, zöld, kék és sárga kvadránsokból álló oszlop ábrája

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.

Direct3D-textúrák