Функция XMQuaternionBaryCentric (directxmath.h)

Возвращает точку в барицентрических координатах, используя указанные кватернионы.

Синтаксис

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

Параметры

[in] Q0

Первый кватернион в треугольнике.

[in] Q1

Второй кватернион в треугольнике.

[in] Q2

Третий кватернион в треугольнике.

[in] f

Коэффициент веса. См. примечания.

[in] g

Коэффициент веса. См. примечания.

Возвращаемое значение

Возвращает кватернион в барицентрических координатах.

Комментарии

В следующем псевдокоде показана операция функции .


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;
        

Обратите внимание, что барицентрические координаты работают для "плоских" поверхностей, но не для "изогнутых". Таким образом, эта функция является немного обходной. Альтернативный метод смешивания 3 кватернионов предоставляется в следующем коде:


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

Требования к платформе

Microsoft Visual Studio 2010 или Microsoft Visual Studio 2012 с windows SDK для Windows 8. Поддерживается для классических приложений Win32, приложений Магазина Windows и приложений Windows Phone 8.

Требования

   
Целевая платформа Windows
Header directxmath.h

См. также раздел

Функции кватерниона библиотеки DirectXMath

XMQuaternionBaryCentricV