Bagikan melalui


Fungsi XMQuaternionBaryCentric (directxmath.h)

Mengembalikan titik dalam koordinat barycentric, menggunakan kuaternion yang ditentukan.

Sintaks

XMVECTOR XM_CALLCONV XMQuaternionBaryCentric(
  [in] FXMVECTOR Q0,
  [in] FXMVECTOR Q1,
  [in] FXMVECTOR Q2,
  [in] float     f,
  [in] float     g
) noexcept;

Parameter

[in] Q0

Kuaternion pertama dalam segitiga.

[in] Q1

Kuaternion kedua dalam segitiga.

[in] Q2

Kuaternion ketiga dalam segitiga.

[in] f

Faktor pembobotan. Lihat keterangannya.

[in] g

Faktor pembobotan. Lihat keterangannya.

Mengembalikan nilai

Mengembalikan kuaternion dalam koordinat barycentric.

Keterangan

Pseudocode berikut menunjukkan pengoperasian fungsi.


XMVECTOR Result;
XMVECTOR QA, QB;
float s = f + g;

if (s != 0.0f)
{
    QA = XMQuaternionSlerp(Q0, Q1, s);
    QB = XMQuaternionSlerp(Q0, Q2, s);
    Result = XMQuaternionSlerp(QA, QB, g / s);
}
else
{
    Result.x = Q0.x;
    Result.y = Q0.y;
    Result.z = Q0.z;
    Result.w = Q0.w;
}

return Result;
        

Perhatikan bahwa koordinat Barycentric berfungsi untuk permukaan 'datar' tetapi tidak untuk yang 'melengkung'. Oleh karena itu, fungsi ini sedikit bekerja di sekitar. Metode alternatif untuk memadukan 3 kuaternion diberikan oleh kode berikut:


inline XMVECTOR XMQuaternionBlend(FXMVECTOR Q0, FXMVECTOR Q1, FXMVECTOR Q2, float w1, float w2)
{
    // Note if you choose one of the three weights to be zero, you get a blend of two
    //  quaternions.  This does not give you slerp of those quaternions.
    float w0 = 1.0f - w1 - w2;
    XMVECTOR Result = XMVector4Normalize(
        XMVectorScale(Q0, w0) +
        XMVectorScale(Q1, w1) +
        XMVectorScale(Q2, w2));
    return Result;
}
        

Persyaratan Platform

Microsoft Visual Studio 2010 atau Microsoft Visual Studio 2012 dengan Windows SDK untuk Windows 8. Didukung untuk aplikasi desktop Win32, aplikasi Windows Store, dan aplikasi Windows Phone 8.

Persyaratan

   
Target Platform Windows
Header directxmath.h

Lihat juga

Fungsi Kuaternion Pustaka DirectXMath

XMQuaternionBaryCentricV