Fungsi D3DXQuaternionSquadSetup (D3DX10Math.h)
Catatan
Pustaka utilitas D3DX10 tidak digunakan lagi. Kami menyarankan agar Anda menggunakan DirectXMath sebagai gantinya.
Menyiapkan titik kontrol untuk interpolasi kuadrangle bulat.
Sintaks
void D3DXQuaternionSquadSetup(
_In_ D3DXQUATERNION *pAOut,
_In_ D3DXQUATERNION *pBOut,
_In_ D3DXQUATERNION *pCOut,
_In_ const D3DXQUATERNION *pQ0,
_In_ const D3DXQUATERNION *pQ1,
_In_ const D3DXQUATERNION *pQ2,
_In_ const D3DXQUATERNION *pQ3
);
Parameter
-
pAOut [in]
-
Jenis: D3DXQUATERNION*
Penunjuk ke AOut.
-
pBOut [in]
-
Jenis: D3DXQUATERNION*
Arahkan ke BOut.
-
pCOut [in]
-
Jenis: D3DXQUATERNION*
Penunjuk ke COut.
-
pQ0 [in]
-
Jenis: const D3DXQUATERNION*
Arahkan ke titik kontrol input, Q0.
-
pQ1 [in]
-
Jenis: const D3DXQUATERNION*
Arahkan ke titik kontrol input, Q1.
-
pQ2 [in]
-
Jenis: const D3DXQUATERNION*
Arahkan ke titik kontrol input, Q2.
-
pQ3 [in]
-
Jenis: const D3DXQUATERNION*
Penunjuk ke titik kontrol input, Q3.
Nilai kembali
Tidak ada.
Keterangan
Fungsi ini mengambil empat titik kontrol, yang disediakan ke input pQ0, pQ1, pQ2, dan pQ3. Fungsi kemudian mengubah nilai-nilai ini untuk menemukan kurva yang mengalir di sepanjang jalur terpendek. Nilai q0, q2, dan q3 dihitung seperti yang ditunjukkan di bawah ini.
q0 = |Q0 + Q1| < |Q0 - Q1| ? -Q0 : Q0
q2 = |Q1 + Q2| < |Q1 - Q2| ? -Q2 : Q2
q3 = |Q2 + Q3| < |Q2 - Q3| ? -Q3 : Q3
Setelah menghitung nilai Q baru, nilai untuk AOut, BOut, dan COut dihitung sebagai berikut:
AOut = q1 * e[-0.25\ *(\ Ln[Exp(q1)*q2]\ +\ Ln[Exp(q1)*q0]\ )\ ]
BOut = q2 * e[-0.25\ *(\ Ln[Exp(q2)*q3]\ +\ Ln[Exp(q2)*q1]\ )\ ]
COut = q2
Catatan
Ln adalah metode API D3DXQuaternionLn dan Exp adalah metode API D3DXQuaternionExp.
Gunakan D3DXQuaternionNormalize untuk input kuaternion apa pun yang belum dinormalisasi.
Contoh
Contoh berikut menunjukkan cara menggunakan sekumpulan kunci kuaternion (Q0, Q1, Q2, Q3) untuk menghitung titik quadrangle dalam (A, B, C). Ini memastikan bahwa tangen terus menerus di seluruh segmen yang berdekatan.
A B
Q0 Q1 Q2 Q3
Contoh kode berikut menunjukkan bagaimana Anda dapat menginterpolasi antara Q1 dan Q2.
// Rotation about the z-axis
D3DXQUATERNION Q0 = D3DXQUATERNION(0, 0, 0.707f, -.707f);
D3DXQUATERNION Q1 = D3DXQUATERNION(0, 0, 0.000f, 1.000f);
D3DXQUATERNION Q2 = D3DXQUATERNION(0, 0, 0.707f, 0.707f);
D3DXQUATERNION Q3 = D3DXQUATERNION(0, 0, 1.000f, 0.000f);
D3DXQUATERNION A, B, C, Qt;
FLOAT time = 0.5f;
D3DXQuaternionSquadSetup(&A, &B, &C, &Q0, &Q1, &Q2, &Q3);
D3DXQuaternionSquad(&Qt, &Q1, &A, &B, &C, time);
Catatan
- C adalah +/- Q2 tergantung pada hasil fungsi.
- Qt adalah hasil dari fungsi .
Hasilnya adalah rotasi 45 derajat di sekitar sumbu z untuk waktu = 0,5.
Persyaratan
Persyaratan | Nilai |
---|---|
Header |
|
Pustaka |
|
Lihat juga