Función XMQuaternionBaryCentric (directxmath.h)
Devuelve un punto en coordenadas barycéntricas, utilizando los cuaterniones especificados.
Sintaxis
XMVECTOR XM_CALLCONV XMQuaternionBaryCentric(
[in] FXMVECTOR Q0,
[in] FXMVECTOR Q1,
[in] FXMVECTOR Q2,
[in] float f,
[in] float g
) noexcept;
Parámetros
[in] Q0
Primer cuaternión del triángulo.
[in] Q1
Segundo cuaternión en el triángulo.
[in] Q2
Tercer cuaternión en el triángulo.
[in] f
Factor de ponderación. Consulte los comentarios.
[in] g
Factor de ponderación. Consulte los comentarios.
Valor devuelto
Devuelve un cuaternión en coordenadas barycéntricas.
Comentarios
El pseudocódigo siguiente muestra la operación de la función.
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;
Tenga en cuenta que las coordenadas Barycéntricas funcionan para superficies "planas", pero no para las "curvadas". Por lo tanto, esta función es un poco alternativa. El código siguiente proporciona un método alternativo para combinar 3 cuaterniones:
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 de la plataforma
Microsoft Visual Studio 2010 o Microsoft Visual Studio 2012 con Windows SDK para Windows 8. Compatible con aplicaciones de escritorio Win32, aplicaciones de la Tienda Windows y Windows Phone 8 aplicaciones.Requisitos
Plataforma de destino | Windows |
Encabezado | directxmath.h |