Funzione XMQuaternionBaryCentric (directxmath.h)
Restituisce un punto in coordinate bariche, utilizzando i quaternioni specificati.
Sintassi
XMVECTOR XM_CALLCONV XMQuaternionBaryCentric(
[in] FXMVECTOR Q0,
[in] FXMVECTOR Q1,
[in] FXMVECTOR Q2,
[in] float f,
[in] float g
) noexcept;
Parametri
[in] Q0
Primo quaternione nel triangolo.
[in] Q1
Secondo quaternione nel triangolo.
[in] Q2
Terzo quaternione nel triangolo.
[in] f
Fattore di ponderazione. Vedere le osservazioni.
[in] g
Fattore di ponderazione. Vedere le osservazioni.
Valore restituito
Restituisce un quaternione in coordinate bariche.
Commenti
Lo pseudocodice seguente illustra l'operazione della funzione .
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;
Si noti che le coordinate barycentriche funzionano per le superfici "flat", ma non per quelle "curve". Questa funzione è quindi un po ' di lavoro. Un metodo alternativo per la fusione di 3 quaternioni viene fornito dal codice seguente:
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;
}
Requisiti della piattaforma
Microsoft Visual Studio 2010 o Microsoft Visual Studio 2012 con Windows SDK per Windows 8. Supportato per le app desktop Win32, le app di Windows Store e Windows Phone 8 app.Requisiti
Piattaforma di destinazione | Windows |
Intestazione | directxmath.h |