Använda vertexinterpolering (Direct3D 9)
Kontrollera om Direct3D stöder vertex tweening genom att söka efter flaggan D3DVTXPCAPS_TWEENING i medlemmen VertexProcessingCaps i strukturen D3DCAPS9. I följande kodexempel används metoden IDirect3DDevice9::GetDeviceCaps för att avgöra om interpolering stöds.
// This example assumes that m_pD3DDevice is
// a valid pointer to a IDirect3DDevice9 interface.
//
D3DCAPS9 d3dCaps;
m_pD3DDevice->GetDeviceCaps( &d3dCaps );
if( 0 != (d3dCaps.VertexProcessingCaps & D3DVTXPCAPS_TWEENING) )
// Vertex tweening is supported.
Om du vill använda vektorinterpolering måste du först definiera en anpassad vertextyp som använder en andra normal eller en andra position. I följande kodexempel visas en exempeldeklaration som innehåller både en andra punkt och en andra position.
struct TEX_VERTEX
{
D3DVECTOR position;
D3DVECTOR normal;
D3DVECTOR position2;
D3DVECTOR normal2;
};
//Create a vertex buffer with the type TEX_VERTEX.
Nästa steg är att ange den aktuella deklarationen. Kodexemplet nedan visar hur du gör detta.
// Create the shader declaration.
D3DVERTEXELEMENT9 decl[] =
{
{ 0, 0, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITION, 0 },
{ 0, 12, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_NORMAL, 0 },
{ 0, 24, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITION, 1 },
{ 0, 36, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_NORMAL, 1 },
D3DDECL_END()
};
Mer information om hur du skapar en anpassad hörntyp och en brytpunktsbuffert finns i Skapa en brytpunktsbuffert (Direct3D 9).
Notera
När brytpunktsinterpolering är aktiverat måste en andra position eller en andra normal finnas i den aktuella deklarationen.
Relaterade ämnen