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 |