次の方法で共有


XMQuaternionBaryCentric 関数 (directxmath.h)

指定した四元数を使用して、barycentric 座標の点を返します。

構文

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

パラメーター

[in] Q0

三角形の最初の四元数。

[in] Q1

三角形の 2 番目の四元数。

[in] Q2

三角形の 3 番目の四元数。

[in] f

重み付け係数。 解説を参照してください。

[in] g

重み付け係数。 解説を参照してください。

戻り値

四元数を barycentric 座標で返します。

解説

次の擬似コードは、 関数の操作を示しています。


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;
        

Barycentric 座標は "フラット" サーフェスでは機能しますが、"曲線" のサーフェスでは機能しないことに注意してください。 したがって、この関数は少し回避策です。 次のコードでは、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;
}
        

プラットフォームの要件

Windows 8 用 Windows SDK を使用した Microsoft Visual Studio 2010 または Microsoft Visual Studio 2012。 Win32 デスクトップ アプリ、Windows ストア アプリ、Windows Phone 8 アプリでサポートされます。

要件

   
対象プラットフォーム Windows
ヘッダー directxmath.h

関連項目

DirectXMath ライブラリの四元数関数

XMQuaternionBaryCentricV