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;
}
平台要求
带有 Windows SDK for Windows 8 的 Microsoft Visual Studio 2010 或 Microsoft Visual Studio 2012。 支持 Win32 桌面应用、Windows 应用商店应用和 Windows Phone 8 应用。要求
目标平台 | Windows |
标头 | directxmath.h |