XMQuaternionBaryCentric-Funktion (directxmath.h)

Gibt einen Punkt in baryzentrischen Koordinaten unter Verwendung der angegebenen Quaternionen zurück.

Syntax

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

Parameter

[in] Q0

Erste Quaternion im Dreieck.

[in] Q1

Zweite Quaternion im Dreieck.

[in] Q2

Dritte Quaternion im Dreieck.

[in] f

Gewichtungsfaktor. Weitere Informationen finden Sie in den Hinweisen.

[in] g

Gewichtungsfaktor. Weitere Informationen finden Sie in den Hinweisen.

Rückgabewert

Gibt eine Quaternion in baryzentrischen Koordinaten zurück.

Hinweise

Der folgende Pseudocode veranschaulicht den Betrieb der Funktion.


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;
        

Beachten Sie, dass baryzentrische Koordinaten für "flache" Oberflächen funktionieren, nicht aber für "gekrümmte". Diese Funktion ist daher ein bisschen ein Work-Around. Eine alternative Methode zum Mischen von 3 Quaternionen wird durch den folgenden Code angegeben:


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;
}
        

Plattformanforderungen

Microsoft Visual Studio 2010 oder Microsoft Visual Studio 2012 mit dem Windows SDK für Windows 8. Unterstützt für Win32-Desktop-Apps, Windows Store-Apps und Windows Phone 8-Apps.

Anforderungen

   
Zielplattform Windows
Kopfzeile directxmath.h

Weitere Informationen

Quaternionsfunktionen der DirectXMath-Bibliothek

XMQuaternionBaryCentricV