2010. szeptember 12., vasárnap

SlimDX9 05 - A csúcspontformátum megadása

Most már, hogy túl vagyunk pár példán észrevehettük, hogy a használt vertex struktúrát mindig az éppen aktuális feladathoz igazítottuk. Ez azért tehettük meg, mert a DirectX a vertexek attribútumait leíró rugalmas vertex formátumot használja (Flexible Vertex Format, FVF) a csúcspontok leírásához.
Egy csúcspontot a háromdimenziós térben egy koordináta számhármassal írhatunk le. Valójában azonban ennél sokkal több információra van szükség ahhoz, hogy a vertexek adatain valóban hasznos és főleg látványos műveleteket tudjunk végrehajtani.
A pozíción kívül számos egyéb paramétere lehet a geometriát leíró csúcspontnak. Az attribútumok számossága és típusa aszerint változik, hogy milyen vizuális hatást szeretnénk elérni. A pozíción kívül a normálvektor, a színérték, a pontméret, az emisszív fény színe, a textúra koordináta, stb. is nagyon fontos lehet. A szükséges jellemzőket a fejlesztők szabadon állíthatják be a Direct3D rugalmas vertex formátumán keresztül.
Az FVF használatával saját csúcspontformátumot alkothatunk, úgy, hogy a használt tulajdonságokat egy sor különböző jellemző vagy (|) kapcsolatával rögzítjük. A vertex leíráshoz felhasználható jellemzőket a következő ábra mutatja be:

DirectX Flexible Vertex Format (FVF)

A SlimDX-ben a VertexFormat felsorolás tagjai közül kerülnek ki a felhasznált jellemzők. A jellemzőket pedig a logikai vagy kapcsolat segítségével kapcsolhatjuk össze. A vertex leírása során a sorrend mindig nagyon fontos, ezért erre különösen figyeljünk.
Minden ilyen rugalmas vertex formátumhoz tartozik egy struktúra, a textúrázáshoz a következő szükséges minimálisan:
    [StructLayout(LayoutKind.Sequential)]
struct Vertex
{
public Vector3 Position;
public Vector2 Texture;
public static readonly VertexFormat Format = VertexFormat.Position | VertexFormat.Texture1;
public static readonly int Stride = Marshal.SizeOf(typeof(Vertex));

public Vertex(float x, float y, float z, float u, float v)
{
Position = new Vector3(x, y, z);
Texture = new Vector2(u, v);
}
}
Ez azt jelenti, hogy a csúcspontjaink természetesen transzformálatlanok, és egyetlen textúrát akarunk rájuk kifeszíteni (nincs jelenleg multitextúrázás). Több textúra használatáról majd később. A Stride a Vertex struktúra méretét tárolja, később még szükség lesz rá, mivel lassan bevezetjük a Vertex Buffer fogalmát is.
Remélem sikerült mindenkinek megérteni az FVF működését és mindenki képes lesz saját vertex formátumát megalkotni.

0 megjegyzés :

Megjegyzés küldése