D3DXWeldVertices-Funktion
Schweißt replizierte Scheitelpunkte mit gleichen Attributen zusammen. Diese Methode verwendet angegebene epsilon-Werte für Gleichheitsvergleiche.
Syntax
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
);
Parameter
-
pMesh [in]
-
Typ: LPD3DXMESH
Zeiger auf ein ID3DXMesh-Objekt , das Gitter, aus dem Scheitelpunkte geschweißt werden sollen.
-
Flaggen [in]
-
Typ: DWORD
Kombination aus einem oder mehreren Flags von D3DXWELDEPSILONSFLAGS.
-
pEpsilons [in]
-
Typ: const D3DXWeldEpsilons*
Zeiger auf eine D3DXWeldEpsilons-Struktur , die die epsilon-Werte angibt, die für diese Methode verwendet werden sollen. Verwenden Sie NULL , um alle Strukturmember mit dem Standardwert 1,0e-6f zu initialisieren.
-
pAdjacencyIn [in]
-
Typ: const DWORD*
Zeiger auf ein Array von drei DWORDs pro Gesicht, die die drei Nachbarn für jedes Gesicht im Quellgitter angeben. Wenn der Rand keine benachbarten Flächen aufweist, wird der Wert 0xffffffff. Wenn dieser Parameter auf NULL festgelegt ist, wird ID3DXBaseMesh::GenerateAdjacency aufgerufen, um logische Adjacency-Informationen zu erstellen.
-
pAdjacencyOut [in, out]
-
Typ: DWORD*
Zeiger auf ein Array von drei DWORDs pro Gesicht, die die drei Nachbarn für jedes Gesicht im optimierten Gitter angeben. Wenn der Rand keine benachbarten Flächen aufweist, wird der Wert 0xffffffff.
-
pFaceRemap [out]
-
Typ: DWORD*
Ein Array von DWORDs, eine pro Gesicht, das die ursprüngliche Gitterseite identifiziert, die jedem Gesicht im geschweißten Gitter entspricht.
-
ppVertexRemap [out]
-
Typ: LPD3DXBUFFER*
Adresse eines Zeigers auf eine ID3DXBuffer-Schnittstelle , die ein DWORD für jeden Scheitelpunkt enthält, der angibt, wie die neuen Scheitelpunkte den alten Scheitelpunkten zugeordnet werden. Diese Neuzuordnung ist nützlich, wenn Sie externe Daten basierend auf der neuen Vertexzuordnung ändern müssen.
Rückgabewert
Typ: HRESULT
Wenn die Funktion erfolgreich ist, wird der Rückgabewert D3D_OK. Wenn die Funktion fehlschlägt, kann der Rückgabewert einer der folgenden Sein: D3DERR_INVALIDCALL, E_OUTOFMEMORY.
Bemerkungen
Diese Funktion verwendet die bereitgestellten Adjacency-Informationen, um die replizierten Punkte zu bestimmen. Scheitelpunkte werden basierend auf einem Epsilon-Vergleich zusammengeführt. Scheitelpunkte mit gleicher Position müssen bereits berechnet und durch punkt repräsentative Daten dargestellt worden sein.
Diese Funktion kombiniert logisch geschweißte Scheitelpunkte, die ähnliche Komponenten aufweisen, z. B. Normal- oder Texturkoordinaten in pEpsilons.
Im folgenden Beispielcode wird diese Funktion mit aktiviertem Schweißen aufgerufen. Scheitelpunkte werden mithilfe von Epsilon-Werten für normale Vektor- und Vertexposition verglichen. Ein Zeiger wird auf ein Face Remapping-Array (pFaceRemap) zurückgegeben.
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
Anforderungen
Anforderung | Wert |
---|---|
Header |
|
Bibliothek |
|
Siehe auch