Função XMQuaternionBaryCentric (directxmath.h)
Retorna um ponto em coordenadas barycentricas, usando os quatérnios especificados.
Sintaxe
XMVECTOR XM_CALLCONV XMQuaternionBaryCentric(
[in] FXMVECTOR Q0,
[in] FXMVECTOR Q1,
[in] FXMVECTOR Q2,
[in] float f,
[in] float g
) noexcept;
Parâmetros
[in] Q0
Primeiro quatérnio no triângulo.
[in] Q1
Segundo quatérnio no triângulo.
[in] Q2
Terceiro quatérnio no triângulo.
[in] f
Fator de ponderação. Confira os comentários.
[in] g
Fator de ponderação. Confira os comentários.
Valor retornado
Retorna um quatérnio em coordenadas barycentricas.
Comentários
O pseudocódigo a seguir demonstra a operação da função.
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;
Observe que as coordenadas Barycentric funcionam para superfícies 'planas', mas não para as 'curvas'. Essa função é, portanto, um pouco de uma solução alternativa. Um método alternativo para mesclar três quatérnios é dado pelo seguinte código:
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;
}
Requisitos da plataforma
Microsoft Visual Studio 2010 ou Microsoft Visual Studio 2012 com o SDK do Windows para Windows 8. Com suporte para aplicativos da área de trabalho Win32, aplicativos da Windows Store e aplicativos Windows Phone 8.Requisitos
Plataforma de Destino | Windows |
Cabeçalho | directxmath.h |