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
요구 사항
요구 사항 | 값 |
---|---|
헤더 |
|
라이브러리 |
|
추가 정보