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


Effektusok (Direct3D 9)

A Microsoft DirectX-effektus lehetővé teszi a csúcspontok és képpontárnyékolók folyamatállapottal való integrálását az objektumok rendereléséhez. Az effektusok a következő logikai lépés az árnyékolók egyedi renderelési feltételek létrehozásához való kombinálásához.

Az effektusok emellett kényelmes módot biztosítanak a különböző hardververziók árnyékolóinak írására is. Mivel a különböző videokártyák különböző funkciókat támogatnak, az alkalmazások számos különböző eszközön futtatható technikákat írhatnak. Így, ha az alkalmazás a legújabb és legnagyobb hardveren fut, az alkalmazás a legkifinomultabb effektustechnikát futtathatja. Másrészt a kevésbé kifinomult effektustechnikák automatikusan kiválaszthatók a kevésbé költséges vagy kevésbé alkalmas hardvereken való futtatáshoz.

Az effektus lecserélheti a csúcspont-feldolgozást és a grafikus folyamat által végrehajtott képpontfeldolgozás egy részét. Egy csúcspont-árnyékolót és egy képpontárnyékolót használó effektusra példa az BasicHLSL-mintában található. Ezt a mintát a DirectX SDK-ból szerezheti be, és megismerheti. További információ a DirectX SDK-ról: Hol található a DirectX SDK?.

Az effektusokkal kapcsolatos további információkért tekintse meg az alábbi témaköröket:

Effektusok és a 3D-folyamat

Az alábbi ábrán a folyamat látható.

3d folyamat diagramja

A folyamat a bemeneti adatokat kimeneti képpontokká alakítja, amelyek kitöltik a keretpuffert. A bemeneti adatok olyan objektumokból származnak, amelyek az objektumtér csúcsaiból, vagy az N-javításokból, téglalapfoltokból és háromszögfoltokból létrehozott magasabbrendű felületekből állnak. A bemeneti adatok szelektálását követően a folyamat csúcsfeldolgozást, primitív feldolgozást és képpontfeldolgozást végez a végső képpontszínek létrehozása előtt.

A csúcs- és képpontfeldolgozást a rögzített függvényfolyamat végezheti el, vagy programozható árnyékolókkal valósítható meg. A bemeneti adatok tessellációja, a primitív feldolgozás és az adatkimenetek folyamatállapot által vannak vezérelve. Mindez integrálható egy effektusba. Az effektus beállítja a folyamat működését vezérlő állapotot. Az effektusok programozható árnyékolókat és rögzített függvényállapotokat kezelnek.

Az effektusok menthetik és visszaállíthatják az állapotot, így az eszköz ugyanabban az állapotban marad, mint az effektus futtatása előtt. Az effektusok által kezelhető állapottípusok a következők:

  • Árnyékoló állapota. Ez magában foglalja az árnyékolók létrehozását és törlését, az árnyékolók állandóinak beállítását, az árnyékoló állapotának beállítását és a renderelést az árnyékolókkal.
  • Textúra és mintavevő állapota. Ez magában foglalja a textúrafájlok megadását, a textúra szakaszainak inicializálását, a mintavevő objektumok létrehozását és a mintavevő állapotának beállítását.
  • Egyéb folyamatállapot. Ez magában foglalja az átalakítások, a világítás, az anyagok és a renderelési beállítások beállításának állapotát. Ezek lehetnek globális vagy helyi változók. A változókat az effektus vagy az alkalmazás állíthatja be.

Az effektusok több megjelenítési lehetőséget, úgynevezett technikákat tartalmaznak. Minden technika magában foglalja a globális változókat, a folyamat állapotát, a textúra és a mintavevő állapotát, valamint a árnyékoló állapotát. Egyetlen stílus implementálva van egy renderelési lépésben. Egy vagy több bérlet befoglalható egy technikába. Az összes passz és technika érvényesíthető annak ellenőrzéséhez, hogy az effektuskód fut-e a hardvereszközön.

Effektusok mentési és visszaállítási állapota

Az effektusok kezelik az állapotot. A szóállapot itt nagyon széles körben használatos, mivel minden olyan információt tartalmaz, amelyet a folyamatnak meg kell adnia a renderelési feltételeknek. Ez magában foglalja a folyamat szinte minden funkcionális területét.

A renderelési lehetőségeket technikák és passzok vezérlik. Egy alkalmazás egy aktív technika beállításával és egy vagy több áthaladás renderelésével effektust jelenít meg. Az effektusok összes megjelenítése egy megfelelő pár Kezdődik és End hívásokon belül történik. A Begin meghívásakor létrejön egy állapotblokk, és az eszköz állapota mentve lesz (hacsak másként nem adja meg). Miután egy technika rendereli az alkalmazás által a rendereléshez megadott passzokat, a rendszer meghívja végét az aktív technika befejezéséhez. Az effektusrendszer úgy válaszol, hogy automatikusan visszaállítja az állapotblokkban rögzített folyamatállapotot (kivéve, ha letiltja ezt a mentési és visszaállítási funkciót).

Több lépésből álló renderelési sorozatok programozása esetén, amelyek mindegyike saját állapotbeállítást igényel, az effektusok csökkenthetik az állapotváltozások nyomon követéséhez szükséges takarítást. Az effektusok által menthető és visszaállítható állapotokról további információt Effektusállapotok (Direct3D 9)című témakörben talál.

Az effektusok megoszthatják a paramétereket

Az effektusparaméterek az effektusban deklarált nem statikus változók. Ez globális változókat és széljegyzeteket is tartalmazhat. Az effektusparaméterek megoszthatók a különböző effektusok között úgy, hogy deklarálják a paramétereket a megosztott kulcsszóval, majd létrehoznak egy effektuskészletet.

A klónozott effektusok ugyanazt az effektuskészletet használják, mint azt az effektust, amelyből klónozzák őket. Az effektus klónozása pontos másolatot készít egy effektusról, beleértve a globális változókat, technikákat, passzokat és széljegyzeteket.

programozási útmutató a Direct3D 9