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
D3DX9Mesh.h
Bibliothek
D3dx9.lib

Siehe auch

Gitterfunktionen