다음을 통해 공유


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 개체에 대한 포인터로, 용접 꼭짓점이 있는 메시입니다.

Flags [in]

형식: DWORD

D3DXWELDEPSILONSFLAGS에서 하나 이상의 플래그 조합

pEpsilons [in]

형식: const D3DXWeldEpsilons*

이 메서드에 사용할 epsilon 값을 지정하는 D3DXWeldEpsilons 구조체에 대한 포인터입니다. NULL을 사용하여 모든 구조체 멤버를 기본값 1.0e-6f로 초기화합니다.

pAdjacencyIn [in]

형식: const DWORD*

소스 메시의 각 면에 대해 세 개의 인접 항목을 지정하는 얼굴당 3개의 DWORD 배열에 대한 포인터입니다. 가장자리에 인접한 면이 없으면 값이 0xffffffff. 이 매개 변수가 NULL로 설정된 경우 ID3DXBaseMesh::GenerateAdjacency 가 호출되어 논리적 인접 정보를 만듭니다.

pAdjacencyOut [in, out]

형식: DWORD*

최적화된 메시의 각 면에 대해 세 개의 인접 항목을 지정하는 얼굴당 3개의 DWORD 배열에 대한 포인터입니다. 가장자리에 인접한 면이 없으면 값이 0xffffffff.

pFaceRemap [out]

형식: DWORD*

용접된 메시의 각 면에 해당하는 원래 메시 얼굴을 식별하는 DWORD 배열(얼굴당 하나씩)입니다.

ppVertexRemap [out]

형식: LPD3DXBUFFER*

새 꼭짓점이 이전 꼭짓점과 매핑되는 방법을 지정하는 각 꼭짓점의 DWORD를 포함하는 ID3DXBuffer 인터페이스에 대한 포인터의 주소입니다. 이 다시 매핑은 새 꼭짓점 매핑을 기반으로 외부 데이터를 변경해야 하는 경우에 유용합니다.

반환 값

형식: HRESULT

함수가 성공하면 반환 값이 D3D_OK. 함수가 실패하면 반환 값은 D3DERR_INVALIDCALL, E_OUTOFMEMORY 중 하나일 수 있습니다.

설명

이 함수는 제공된 인접 정보를 사용하여 복제되는 지점을 확인합니다. 꼭짓점은 엡실론 비교에 따라 병합됩니다. 위치가 같은 꼭짓점은 이미 계산되어 지점 대표 데이터로 표현되어야 합니다.

이 함수는 pEpsilon 내의 노멀 또는 텍스처 좌표와 같은 유사한 구성 요소가 있는 논리적으로 용접된 꼭짓점을 결합합니다.

다음 예제 코드는 용접을 사용하도록 설정된 상태에서 이 함수를 호출합니다. 꼭짓점은 일반 벡터 및 꼭짓점 위치에 epsilon 값을 사용하여 비교됩니다. 포인터가 얼굴 다시 매핑 배열(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

추가 정보

메시 함수