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 |