Поделиться через


Использование tweening вершин (Direct3D 9)

Чтобы определить, поддерживает ли Direct3D преобразование вершин, проверка флаг D3DVTXPCAPS_TWEENING в элементе VertexProcessingCaps структуры D3DCAPS9. В следующем примере кода используется метод IDirect3Device9::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).

Примечание

Если включено преобразование вершин, в текущем объявлении должна присутствовать вторая позиция или вторая норма.

 

Вертекс Tweening