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:
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 |
|
Pustaka |
|
Baca juga