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


Функция D3DXWeldVertices

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

Синтаксис

HRESULT D3DXWeldVertices(
  _In_          LPD3DXMESH       pMesh,
  _In_          DWORD            Flags,
  _In_    const D3DXWeldEpsilons *pEpsilons,
  _In_    const DWORD            *pAdjacencyIn,
  _Inout_       DWORD            *pAdjacencyOut,
  _Out_         DWORD            *pFaceRemap,
  _Out_         LPD3DXBUFFER     *ppVertexRemap
);

Параметры

pMesh [in]

Тип: LPD3DXMESH

Указатель на объект ID3DXMesh , сетку, из которой сваривают вершины.

Флаги [в]

Тип: DWORD

Сочетание одного или нескольких флагов из D3DXWELDEPSILONSFLAGS.

pEpsilons [in]

Тип: const D3DXWeldEpsilons*

Указатель на структуру D3DXWeldEpsilons , указывающую значения epsilon, используемые для этого метода. Используйте значение NULL , чтобы инициализировать все элементы структуры со значением по умолчанию 1,0e–6f.

pAdjacencyIn [in]

Тип: const DWORD*

Указатель на массив из трех DWORD на каждое лицо, указывающее три соседя для каждого лица в исходной сетке. Если ребро не имеет смежных граней, значение будет 0xffffffff. Если для этого параметра задано значение NULL, будет вызван ID3DXBaseMesh::GenerateAdjacency для создания сведений о логической смежности.

pAdjacencyOut [in, out]

Тип: DWORD*

Указатель на массив из трех DWORD на лицо, который указывает три соседя для каждого лица в оптимизированной сетке. Если ребро не имеет смежных граней, значение будет 0xffffffff.

pFaceRemap [out]

Тип: DWORD*

Массив DWORD, по одному на каждое лицо, который идентифицирует исходную сторону сетки, соответствующую каждой грани в сварной сетке.

ppVertexRemap [out]

Тип: LPD3DXBUFFER*

Адрес указателя на интерфейс ID3DXBuffer , содержащий DWORD для каждой вершины, указывающий, как новые вершины сопоставляются со старыми вершинами. Это повторное сопоставление полезно, если необходимо изменить внешние данные на основе нового сопоставления вершин.

Возвращаемое значение

Тип: HRESULT

Если функция выполняется успешно, возвращаемое значение будет D3D_OK. Если функция завершается сбоем, возвращаемое значение может быть одним из следующих: D3DERR_INVALIDCALL, E_OUTOFMEMORY.

Комментарии

Эта функция использует предоставленные сведения о смежности для определения реплицируемых точек. Вершины объединяются на основе сравнения эпсилонов. Вершины с равным положением уже должны быть рассчитаны и представлены репрезентативными данными.

Эта функция объединяет логически сварные вершины, имеющие схожие компоненты, такие как нормали или координаты текстуры в пределах pEpsilons.

В следующем примере кода эта функция вызывается с включенной сваркой. Вершины сравниваются с помощью значений эпсилона для нормального вектора и положения вершин. Указатель возвращается в массив переназначение лиц (pFaceRemap).

TCHAR            strMediaPath[512];       // X-file path 
LPD3DXBUFFER     pAdjacencyBuffer = NULL; // adjacency data buffer
LPD3DXBUFFER     pD3DXMtrlBuffer  = NULL; // material buffer
LPD3DXMESH       pMesh            = NULL; // mesh object
DWORD            m_dwNumMaterials;        // number of materials
D3DXWELDEPSILONS Epsilons;                // structure with epsilon values
DWORD            *pFaceRemap[65536];      // face remapping array
DWORD            i;                       // internal variable
    
    // Load the mesh from the specified file
    hr = D3DXLoadMeshFromX ( strMediaPath,
                         D3DXMESH_MANAGED,
                         m_pd3dDevice,
                         &pAdjacencyBuffer,
                         &pD3DXMtrlBuffer,
                         NULL,
                         &m_dwNumMaterials,
                         &pMesh ) )
                             
    if( FAILED( hr ) ) 
      goto End;              // Go to error handling
    
    // Set epsilon values
    Epsilons.Normal = 0.001;
    Epsilons.Position = 0.1;
    
    // Weld the vertices
    for( i=0; i < 65536; i++ )
    { 
        pFaceRemap[i] = 0; 
    }
    
    hr = D3DXWeldVertices ( pMesh,
                            D3DXWELDEPSILONS_WELDPARTIALMATCHES,
                            &Epsilons,
                            (DWORD*)pAdjacencyBuffer->GetBufferPointer(),
                            (DWORD*)pAdjacencyBuffer->GetBufferPointer(),
                            (DWORD*)pFaceRemap,
                            NULL )
                            
    if( FAILED( hr ) ) 
      goto End;              // Go to error handling

Требования

Требование Значение
Заголовок
D3DX9Mesh.h
Библиотека
D3dx9.lib

См. также раздел

Функции сетки