Fungsi D3DXComputeTangentFrameEx

Melakukan komputasi bingkai tangen pada jala. Vektor tangen, binormal, dan normal opsional dihasilkan. Singularitas ditangani sesuai kebutuhan dengan mengelompokkan tepi dan memisahkan simpul.

Sintaks

HRESULT D3DXComputeTangentFrameEx(
  _In_        ID3DXMesh   *pMesh,
  _In_        DWORD       dwTextureInSemantic,
  _In_        DWORD       dwTextureInIndex,
  _In_        DWORD       dwUPartialOutSemantic,
  _In_        DWORD       dwUPartialOutIndex,
  _In_        DWORD       dwVPartialOutSemantic,
  _In_        DWORD       dwVPartialOutIndex,
  _In_        DWORD       dwNormalOutSemantic,
  _In_        DWORD       dwNormalOutIndex,
  _In_        DWORD       dwOptions,
  _In_  const DWORD       *pdwAdjacency,
  _In_        FLOAT       fPartialEdgeThreshold,
  _In_        FLOAT       fSingularPointThreshold,
  _In_        FLOAT       fNormalEdgeThreshold,
  _Out_       ID3DXMesh   **ppMeshOut,
  _Out_       ID3DXBuffer **ppVertexMapping
);

Parameter

pMesh [in]

Jenis: ID3DXMesh*

Penunjuk ke objek mesh ID3DXMesh input.

dwTextureInSemantic [in]

Jenis: DWORD

Menentukan semantik input koordinat tekstur. Jika D3DX_DEFAULT, fungsi mengasumsikan bahwa tidak ada koordinat tekstur, dan fungsi akan gagal kecuali perhitungan vektor normal ditentukan.

dwTextureIndex [in]

Jenis: DWORD

Jika jala memiliki beberapa koordinat tekstur, menentukan koordinat tekstur yang akan digunakan untuk komputasi bingkai tangen. Jika nol, jala hanya memiliki satu koordinat tekstur.

dwUPartialOutSemantic [in]

Jenis: DWORD

Menentukan semantik output untuk jenis, biasanya D3DDECLUSAGE_TANGENT, yang menjelaskan di mana turunan parsial sehubungan dengan koordinat tekstur U akan disimpan. Jika D3DX_DEFAULT, turunan parsial ini tidak akan disimpan.

dwUPartialOutIndex [in]

Jenis: DWORD

Menentukan indeks semantik untuk menyimpan turunan parsial sehubungan dengan koordinat tekstur U.

dwVPartialOutSemantic [in]

Jenis: DWORD

Menentukan jenis D3DDECLUSAGE, biasanya D3DDECLUSAGE_BINORMAL, yang menjelaskan di mana turunan parsial sehubungan dengan koordinat tekstur V akan disimpan. Jika D3DX_DEFAULT, turunan parsial ini tidak akan disimpan.

dwVPartialOutIndex [in]

Jenis: DWORD

Menentukan indeks semantik untuk menyimpan turunan parsial sehubungan dengan koordinat tekstur V.

dwNormalOutSemantic [in]

Jenis: DWORD

Menentukan semantik normal output, biasanya D3DDECLUSAGE_NORMAL, yang menjelaskan di mana vektor normal di setiap puncak akan disimpan. Jika D3DX_DEFAULT, maka vektor normal ini tidak akan disimpan.

dwNormalOutIndex [in]

Jenis: DWORD

Menentukan indeks semantik untuk menyimpan vektor normal di setiap verteks.

dwOptions [in]

Jenis: DWORD

Kombinasi satu atau beberapa bendera D3DXTANGENT yang menentukan opsi komputasi bingkai tangen. Jika NULL, opsi berikut akan ditentukan:

Deskripsi Nilai Bendera D3DXTANGENT
Beratkan panjang vektor normal dengan sudut, dalam radian, disubtendasikan oleh dua tepi meninggalkan puncak. & ! ( D3DXTANGENT_WEIGHT_BY_AREA | D3DXTANGENT_WEIGHT_EQUAL )
Komputasi koordinat Kartesius ortogonal dari koordinat tekstur (u, v). Lihat Keterangan. & ! ( D3DXTANGENT_ORTHOGONALIZE_FROM_U | D3DXTANGENT_ORTHOGONALIZE_FROM_V )
Tekstur tidak dibungkus dalam arah u atau v & ! (D3DXTANGENT_WRAP_UV)
Turunan parsial sehubungan dengan koordinat tekstur dinormalisasi. & ! (D3DXTANGENT_DONT_NORMALIZE_PARTIALS)
Simpul diurutkan ke arah berlawanan arah jarum-jarum di sekitar setiap segitiga. & ! ( D3DXTANGENT_WIND_CW )
Gunakan vektor normal per vertex yang sudah ada dalam jala input. & ! ( D3DXTANGENT_CALCULATE_NORMALS )

 

Jika D3DXTANGENT_GENERATE_IN_PLACE tidak diatur, jala input akan dikloning. Oleh karena itu jala asli harus memiliki ruang yang cukup untuk menyimpan vektor normal komputasi dan data turunan parsial.

pdwAdjacency [in]

Jenis: const DWORD*

Pointer ke array tiga DWORD per wajah yang menentukan tiga tetangga untuk setiap wajah dalam jala. Jumlah byte dalam array ini harus setidaknya 3 * GetNumFaces * sizeof(DWORD).

fPartialEdgeThreshold [in]

Jenis: FLOAT

Menentukan kosinus maksimum sudut di mana dua turunan parsial dianggap tidak kompatibel satu sama lain. Jika produk titik dari arah dua turunan parsial dalam segitiga yang berdekatan kurang dari atau sama dengan ambang batas ini, maka simpul yang dibagi antara segitiga ini akan dibagi.

fSingularPointThreshold [in]

Jenis: FLOAT

Menentukan besaran maksimum turunan parsial di mana puncak akan dianggap tunggal. Karena beberapa segitiga adalah insiden pada titik yang memiliki bingkai tangen terdekat, tetapi sama sekali membatalkan satu sama lain (seperti di bagian atas bola), besarnya turunan parsial akan berkurang. Jika besarannya kurang dari atau sama dengan ambang batas ini, maka puncak akan dibagi untuk setiap segitiga yang berisinya.

fNormalEdgeThreshold [in]

Jenis: FLOAT

Mirip dengan fPartialEdgeThreshold, menentukan kosinus maksimum sudut antara dua normal yang merupakan ambang batas di mana simpul yang dibagikan antara segitiga akan dibagi. Jika produk titik dari dua normal kurang dari ambang batas, simpul bersama akan dibagi, membentuk tepi keras antara segitiga tetangga. Jika produk titik lebih dari ambang batas, segitiga tetangga akan menginterpolasi normal mereka.

ppMeshOut [out]

Jenis: ID3DXMesh**

Alamat penunjuk ke objek jala ID3DXMesh output yang menerima data vektor tangen, binormal, dan normal yang dihitung.

ppVertexMapping [out]

Jenis: ID3DXBuffer**

Alamat penunjuk ke objek buffer ID3DXBuffer output yang menerima pemetaan simpul baru yang dihitung oleh metode ini ke simpul asli. Buffer adalah array DWORD, dengan ukuran array yang didefinisikan sebagai jumlah simpul dalam ppMeshOut.

Nilai hasil

Jenis: HRESULT

Jika fungsi berhasil, nilai yang dikembalikan adalah S_OK. Jika fungsi gagal, nilai pengembalian bisa menjadi salah satu dari yang berikut: D3DERR_INVALIDCALL, D3DXERR_INVALIDDATA, E_OUTOFMEMORY.

Keterangan

Versi sederhana dari fungsi ini tersedia sebagai D3DXComputeTangentFrame.

Vektor normal komputasi di setiap vertex selalu dinormalisasi untuk memiliki panjang unit.

Solusi paling kuat untuk menghitung koordinat Kartesius ortogonal adalah tidak mengatur bendera D3DXTANGENT_ORTHOGONALIZE_FROM_U dan D3DXTANGENT_ORTHOGONALIZE_FROM_V, sehingga koordinat ortogonal dihitung dari koordinat tekstur Anda dan v. Namun, dalam hal ini, jika u atau v adalah nol, maka fungsi akan menghitung koordinat ortogonal menggunakan D3DXTANGENT_ORTHOGONALIZE_FROM_V atau D3DXTANGENT_ORTHOGONALIZE_FROM_U, masing-masing.

Persyaratan

Persyaratan Value
Header
D3DX9Mesh.h
Pustaka
D3dx9.lib

Baca juga

Fungsi Jala

D3DXComputeTangentFrame