Функция 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
Требования
Требование | Значение |
---|---|
Заголовок |
|
Библиотека |
|
См. также раздел