Bagikan melalui


Fungsi D3DXWeldVertices

Welds bersama-sama direplikasi simpul yang memiliki atribut yang sama. Metode ini menggunakan nilai epsilon yang ditentukan untuk perbandingan kesetaraan.

Sintaks

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]

Jenis: LPD3DXMESH

Arahkan ke objek ID3DXMesh , jala dari mana simpul dilas.

Bendera [in]

Jenis: DWORD

Kombinasi satu atau beberapa bendera dari D3DXWELDEPSILONSFLAGS.

pEpsilons [in]

Jenis: const D3DXWeldEpsilons*

Penunjuk ke struktur D3DXWeldEpsilons , menentukan nilai epsilon yang akan digunakan untuk metode ini. Gunakan NULL untuk menginisialisasi semua anggota struktur ke nilai default 1.0e-6f.

pAdjacencyIn [in]

Jenis: const DWORD*

Arahkan ke array tiga DWORD per wajah yang menentukan tiga tetangga untuk setiap wajah dalam jala sumber. Jika tepi tidak memiliki wajah yang berdekatan, nilainya 0xffffffff. Jika parameter ini diatur ke NULL, ID3DXBaseMesh::GenerateAdjacency akan dipanggil untuk membuat informasi bersebelahan logis.

pAdjacencyOut [in, out]

Jenis: DWORD*

Arahkan ke array tiga DWORD per wajah yang menentukan tiga tetangga untuk setiap wajah dalam jala yang dioptimalkan. Jika tepi tidak memiliki wajah yang berdekatan, nilainya 0xffffffff.

pFaceRemap [out]

Jenis: DWORD*

Array DWORD, satu per wajah, yang mengidentifikasi wajah jala asli yang sesuai dengan setiap wajah dalam jala yang dilas.

ppVertexRemap [out]

Jenis: LPD3DXBUFFER*

Alamat penunjuk ke antarmuka ID3DXBuffer , yang berisi DWORD untuk setiap puncak yang menentukan bagaimana simpul baru memetakan ke simpul lama. Remap ini berguna jika Anda perlu mengubah data eksternal berdasarkan pemetaan vertex baru.

Menampilkan nilai

Jenis: HRESULT

Jika fungsi berhasil, nilai yang dikembalikan adalah D3D_OK. Jika fungsi gagal, nilai yang dikembalikan dapat berupa salah satu hal berikut: D3DERR_INVALIDCALL, E_OUTOFMEMORY.

Keterangan

Fungsi ini menggunakan informasi bersebelahan yang disediakan untuk menentukan titik yang direplikasi. Simpul digabungkan berdasarkan perbandingan epsilon. Simpul dengan posisi yang sama harus sudah dihitung dan diwakili oleh data perwakilan titik.

Fungsi ini menggabungkan simpul yang dilas secara logis yang memiliki komponen serupa, seperti koordinat normal atau tekstur dalam pEpsilon.

Contoh kode berikut memanggil fungsi ini dengan penglas diaktifkan. Simpul dibandingkan menggunakan nilai epsilon untuk vektor normal dan posisi verteks. Penunjuk dikembalikan ke array pemecahan ulang wajah (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

Persyaratan

Persyaratan Nilai
Header
D3DX9Mesh.h
Pustaka
D3dx9.lib

Lihat juga

Fungsi Jala