使用顶点补间 (Direct3D 9)

若要确定 Direct3D 是否支持顶点补间,检查 D3DCAPS9 结构的 VertexProcessingCaps 成员中的 D3DVTXPCAPS_TWEENING 标志。 下面的代码示例使用 IDirect3DDevice9::GetDeviceCaps 方法确定是否支持补间。

// 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.

若要使用矢量补间,必须首先设置使用第二个法线或第二个位置的自定义顶点类型。 下面的代码示例演示了一个同时包含第二个点和第二个位置的示例声明。

struct TEX_VERTEX
{
    D3DVECTOR position;
    D3DVECTOR normal;
    D3DVECTOR position2;
    D3DVECTOR normal2;
};

//Create a vertex buffer with the type TEX_VERTEX.

下一步是设置当前声明。 下面的代码示例演示如何执行此操作。

// 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()
};

有关创建自定义顶点类型和顶点缓冲区的详细信息,请参阅 (Direct3D 9) 创建顶点缓冲区

注意

启用顶点补间后,当前声明中必须存在第二个位置或第二个法线。

 

顶点过渡