Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
I pipelinen för fast funktionshörn tillämpar bearbetning av hörnen i en hörnbuffert de aktuella transformeringsmatriserna för enheten. Hörnåtgärder som belysning, generering av klippflaggor och uppdateringsfunktioner kan också användas, om du vill. När du använder bearbetning av fast funktionshörn styrs ändring av elementen i målhörnets buffert av flaggan D3DPV_DONOTCOPYDATA. Den här flaggan gäller endast för bearbetning av fasta funktionshörn. Gränssnittet IDirect3DDevice9 exponerar IDirect3DDevice9::P rocessVertices metod för att bearbeta hörn. Du bearbetar hörn från en hörnskuggning till uppsättningen indataströmmar, vilket genererar en enda ström med interfolierade hörndata till målhörnbufferten genom att anropa IDirect3DDevice9::P rocessVertices-metoden. Metoden accepterar fem parametrar som beskriver platsen och mängden hörn som metoden riktar in sig på, målhörnbufferten och bearbetningsalternativen. Efter anropet innehåller målbufferten bearbetade hörndata.
De första, andra och tredje parametrarna, SrcStartIndex, DestIndex och VertexCount, återspeglar indexet för det första hörn som ska läsas in, indexet i målbufferten där hörnen ska placeras och det totala antalet hörn som ska bearbetas och placeras i målbufferten. Den fjärde parametern, pDestBuffer, ska anges till adressen för IDirect3DVertexBuffer9-gränssnittet för hörnbuffertobjektet som tar emot källhörn. Parametern SrcStartIndex anger det index där metoden ska börja bearbeta hörn.
Den sista parametern, Flags, bestämmer särskilda bearbetningsalternativ för metoden. Du kan ange den här parametern till 0 för standard hörnbearbetning eller för att D3DPV_DONOTCOPYDATA för att optimera bearbetningen i vissa situationer. Du kan också kombinera värdet D3DPV_DONOTCOPYDATA med ett eller flera D3DLOCK värden som är lämpliga för målbufferten. När du anger Flaggor till 0 kopieras hörnkomponenter i målhörnsbuffertens hörnformat som inte påverkas av hörnåtgärden fortfarande från hörnskuggningen eller anges till 0. Men när du använder D3DPV_DONOTCOPYDATA skriver IDirect3DDevice9::P rocessVertices inte över färg- och strukturkoordinatinformation i målbufferten om inte dessa data genereras av Direct3D. Diffus färg genereras när belysning aktiveras, det vill D3DRS_LIGHTING är inställt på TRUE. Spektulär färg genereras när belysning aktiveras och specular aktiveras, dvs. D3DRS_SPECULARENABLE och D3DRS_LIGHTING är inställda på TRUE. Spektrulär färg genereras också när dimma aktiveras. Strukturkoordinater genereras när texturtransformering eller texturgenerering aktiveras. IDirect3DDevice9::P rocessVertices använder de aktuella återgivningstillstånden för att avgöra vilken hörnbearbetning som ska göras.
FVF-användningsinställningar för målhörnbuffertar
Metoden IDirect3DDevice9::P rocessVertices kräver specifika inställningar för D3DFVF- för målhörnsbufferten. FVF-användningsinställningarna måste vara kompatibla med de aktuella inställningarna för hörnbearbetning.
För bearbetning av fasta funktionshörn kräver IDirect3DDevice9::P rocessVertices följande FVF-inställningar:
- Positiontypen är alltid D3DFVF_XYZRHW ; därför är D3DFVF_XYZ Och D3DFVF_XYZB1 via D3DFVF_XYZB5 ogiltiga.
- Flaggorna D3DFVF_NORMAL, D3DFVF_RESERVED0 och D3DFVF_RESERVED2 får inte anges.
- Flaggan D3DFVF_DIFFUSE måste anges om en OR-åtgärd för följande villkor returnerar sant:
- Belysning är aktiverat. D3DRS_LIGHTING är alltså TRUE.
- Belysningen är inaktiverad, diffus färg finns i indatahörnströmmarna och D3DPV_DONOTCOPYDATA inte har angetts.
- Flaggan D3DFVF_SPECULAR måste anges om en OR-åtgärd för följande villkor returnerar true:
- Belysning är aktiverat och spektulär färg är aktiverad. D3DRS_SPECULARENABLE är alltså TRUE.
- Belysning är inaktiverad, spektulär färg finns i indatahörnströmmarna och D3DPV_DONOTCOPYDATA inte har angetts.
- Hörndimma är aktiverat. D3DRS_FOGVERTEXMODE är alltså inte inställt på D3DFOG_NONE.
Dessutom måste antalet strukturkoordinater anges på följande sätt:
- Om texturtransformering och texturgenerering är inaktiverade för alla aktiva struktursteg, och D3DPV_DONOTCOPYDATA inte har angetts, krävs antalet och typen av utdatastrukturkoordinater för att matcha koordinaterna för indatahörnets strukturkoordinater. Om D3DPV_DONOTCOPYDATA anges och texturtransformering och texturgenerering inaktiveras ignoreras koordinaterna för utdatastruktur.
- Om texturtransformering eller texturgenerering är aktiverat för aktiva struktursteg kan utdatahörnet behöva innehålla fler strukturkoordinatuppsättningar än indatahörnet. Detta beror på spridningen av strukturkoordinater från dem som genereras av texturgenerering eller härleds av texturtransformeringar. Observera att en liknande spridning av strukturkoordinater sker under IDirect3DDevice9::D rawPrimitive-anrop, men inte är synlig för programprogram programmeraren. I det här fallet genererar Direct3D en ny uppsättning strukturkoordinater. Den nya uppsättningen strukturkoordinater härleds genom att stega igenom texturstegen och analysera inställningarna för texturgenerering, strukturomvandling och strukturkoordinatindex för att avgöra om en unik uppsättning strukturkoordinater krävs för den fasen. Varje gång en ny uppsättning krävs allokeras den i ökande ordning. Observera att det maximala och typiska kravet är en uppsättning per steg, även om det kan vara mindre på grund av delning av icke-omsändliga strukturkoordinater via D3DTSS_TEXCOORDINDEX.
För varje struktursteg genereras därför en ny uppsättning strukturkoordinater om en struktur är bunden till det stadiet och något av följande villkor är sant:
- Texturgenerering är aktiverat för den fasen.
- Strukturomvandling är aktiverat för den fasen.
- Icke-omsedd indatastrukturkoordinater refereras till via D3DTSS_TEXCOORDINDEX för första gången.
När Direct3D genererar strukturkoordinater måste programmet utföra följande åtgärder:
- Använd en målhörnbuffert med lämplig FVF-användning.
- Omprogrammera D3DTSS_TEXCOORDINDEX av struktursteget enligt placeringen av de efterbearbetade strukturkoordinaterna. Observera att omprogrammering av inställningen D3DTSS_TEXCOORDINDEX inträffar när den bearbetade hörnbufferten används i efterföljande IDirect3DDevice9::D rawPrimitive och IDirect3DDevice9::D rawIndexedPrimitive-anrop.
Slutligen måste texturens koordinatdimensionitet (D3DFVF_TEX0 via D3DFVF_TEX8 ) anges på följande sätt:
- För varje strukturkoordinatuppsättning, om texturtransformering och texturgenerering inaktiveras, måste utdatastrukturens koordinatdimensionitet matcha indata. Om texturtransformen är aktiverad måste utdatadimensioniteten matcha antalet som definierats av inställningarna D3DTTFF_COUNT1, D3DTTFF_COUNT2, D3DTTFF_COUNT3 eller D3DTTFF_COUNT4. Om texturtransformningen är inaktiverad och texturgenereringen är aktiverad måste utdatadimensioniteten matcha inställningarna för texturgenereringsläget. för närvarande genererar alla lägen tre flyttalvärden.
När IDirect3DDevice9::P rocessVertices misslyckas på grund av en inkompatibel FVF-kod för målhörnet skrivs den förväntade koden ut till felsökningsutdata (endast felsökningsversioner).
Relaterade ämnen