Bagikan melalui


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
D3DX10Math.h
Pustaka
D3DX10.lib

Lihat juga

Fungsi matematika