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


Rögzített függvény FVF-kódjai (Direct3D 9)

Az FVF-kód az egyetlen adatfolyamban egymásba fonódó csúcsok tartalmát írja le. Általában meghatározza a rögzített függvény csúcsának feldolgozási folyamata által feldolgozandó adatokat. Ez egy régebbi stílusú csúcs deklaráció; az aktuális csúcspont deklarálási stílusának megtekintéséhez lásd: D3DVERTEXELEMENT9.

A Direct3D-alkalmazások többféleképpen definiálhatnak modell csúcspontokat. A rugalmas csúcspontok definícióinak , más néven rugalmas csúcsformátumok vagy rugalmas csúcsformátumkódok támogatása lehetővé teszi, hogy az alkalmazás csak azokat a csúcskomponenseket használja, amelyekre szüksége van, kiküszöbölve a nem használt összetevőket. Ha csak a szükséges csúcspont-összetevőket használja, az alkalmazás képes megőrizni a memóriát, és minimalizálni a modellek rendereléséhez szükséges feldolgozási sávszélességet. A csúcspontok formázásának módját D3DFVF kódok kombinációjával írják le.

Az FVF-specifikáció a D3DFVF_PSIZE által megadott pontméret-formátumokat tartalmazza. Ezt a méretet nem átalakított és megvilágított csúcsok kameratéregységeiben, TL csúcspontokhoz pedig eszköztéregységekben fejezik ki.

Az IDirect3DDevice9 felületének renderelési módszerei olyan módszereket biztosítanak a C++ alkalmazások számára, amelyek elfogadják ezen jelzők kombinációját, és ezek használatával határozzák meg a primitívek megjelenítésének módját. Ezek a jelzők alapvetően azt jelzik a rendszernek, hogy mely csúcsösszetevők – pozíció, csúcsok keverési súlyozása, normál, színek, valamint a textúra koordinátáinak száma és formátuma – az alkalmazás használja, és közvetett módon a renderelési folyamat mely részeit szeretné alkalmazni a Direct3D-hez. Ezenkívül egy adott csúcsformázási jelző jelenléte vagy hiánya közli a rendszerrel, hogy mely csúcspont-összetevőmezők találhatók a memóriában, és melyeket nem hagyott ki.

Az eszközkorlátozások meghatározásához lekérdezheti az eszközt az D3DCAPS9FVFCaps-tagjának D3DFVFCAPS_DONOTSTRIPELEMENTS és D3DFVFCAPS_TEXCOORDCOUNTMASK értékeihez.

A textúrakoordináták különböző formátumokban deklarálhatók, így a textúrák legfeljebb egy vagy akár négy anyagminta-koordinátával kezelhetők (2D előre jelzett anyagminta-koordináták esetén). További információ: Textúrakoordináta-formátumok (Direct3D 9). A D3DFVF_TEXCOORDSIZEN makrókészlettel olyan bitmintákat hozhat létre, amelyek azonosítják a csúcspontformátum által használt textúrakoordináta-formátumokat.

Egyetlen alkalmazás sem fogja használni az összes összetevőt. A kölcsönös homogén W (RHW) és a csúcs normális mezők kölcsönösen kizárják egymást. A legtöbb alkalmazás sem próbálja meg mind a nyolc textúrakoordinátát használni, de a Direct3D rendelkezik ezzel a kapacitással. Számos korlátozás van arra, hogy mely jelzőket használhatja más jelzőkkel. Nem használhatja például a D3DFVF_XYZ és D3DFVF_XYZRHW jelzőket, mivel ez azt jelezné, hogy az alkalmazás egy csúcspont pozícióját írja le a nem transzformált és az átalakított csúcsokkal együtt.

Indexelt csúcspontok keverésének használatához a D3DFVF_LASTBETA_UBYTE4 jelzőnek az FVF-deklaráció végén kell megjelennie. A jelző jelenléte azt jelzi, hogy az ötödik keverési súlyt az úszó helyett DWORD-ként kezeli a rendszer. További információ: Indexelt csúcsok keverése (Direct3D 9).

Az alábbi kódminták a D3DFVF_LASTBETA_UBYTE4 jelzőt használó FVF-kód és a nem használt FVF-kód közötti különbséget mutatják. A jelölő D3DFVF_XYZB3 négy keverési index használatakor jelenik meg, mert mindig kivonja az első három összegét az első számból a negyedik lekéréséhez (blend₄ = 1 - (blend₁ + blend₂ + blend₃)).

#define D3DFVF_BLENDVERTEX (D3DFVF_XYZB3|D3DFVF_NORMAL|D3DFVF_TEX1)

struct BLENDVERTEX
{
    D3DXVECTOR3 v;       // Referenced as v0 in the vertex shader
    FLOAT       blend1;  // Referenced as v1.x in the vertex shader
    FLOAT       blend2;  // Referenced as v1.y in the vertex shader
    FLOAT       blend3;  // Referenced as v1.z in the vertex shader
                         // v1.w = 1.0 - (v1.x + v1.y + v1.z)
    D3DXVECTOR3 n;       // Referenced as v3 in the vertex shader
    FLOAT       tu, tv;  // Referenced as v7 in the vertex shader
};

Az alább definiált FVF a D3DFVF_LAST_UBYTE4 jelzőt használja.

#define D3DFVF_BLENDVERTEX (D3DFVF_XYZB4 | D3DFVF_LASTBETA_UBYTE4 |D3DFVF_NORMAL|D3DFVF_TEX1)

struct BLENDVERTEX
{
    D3DXVECTOR3 v;       // Referenced as v0 in the vertex shader
    FLOAT       blend1;  // Referenced as v1.x in the vertex shader
    FLOAT       blend2;  // Referenced as v1.y in the vertex shader
    FLOAT       blend3;  // Referenced as v1.z in the vertex shader
                         // v1.w = 1.0 - (v1.x + v1.y + v1.z)
    DWORD       indices; // Referenced as v2.xyzw in the vertex shader 
    D3DXVECTOR3 n;       // Referenced as v3 in the vertex shader
    FLOAT       tu, tv;  // Referenced as v7 in the vertex shader
};

csúcspont deklarációja