XMVector4Normalize 函数 (directxmath.h)
返回 4D 向量的规范化版本。
语法
XMVECTOR XM_CALLCONV XMVector4Normalize(
[in] FXMVECTOR V
) noexcept;
参数
[in] V
4D 矢量。
返回值
返回 V 的规范化版本。
注解
对于长度为 0 的向量,此函数返回零向量。 对于长度无限的向量,它将返回 QNaN 的向量。
请注意,对于大多数图形应用程序,确保向量具有定义完善的长度,不会导致规范化问题是常见的做法。 但是,如果需要适用于所有浮点输入的可靠规范化,可以改用以下代码:
inline XMVECTOR XMVector4NormalizeRobust( FXMVECTOR V )
{
// Compute the maximum absolute value component.
XMVECTOR vAbs = XMVectorAbs(V);
XMVECTOR max0 = XMVectorSplatX(vAbs);
XMVECTOR max1 = XMVectorSplatY(vAbs);
XMVECTOR max2 = XMVectorSplatZ(vAbs);
XMVECTOR max3 = XMVectorSplatW(vAbs);
max0 = XMVectorMax(max0, max1);
max2 = XMVectorMax(max2, max3);
max0 = XMVectorMax(max0, max2);
// Divide by the maximum absolute component.
XMVECTOR normalized = XMVectorDivide(V, max0);
// Set to zero when the original length is zero.
XMVECTOR mask = XMVectorNotEqual(g_XMZero, max0);
normalized = XMVectorAndInt(normalized, mask);
// (sqrLength, sqrLength, sqrLength, sqrLength)
XMVECTOR t0 = XMVector4Dot(normalized, normalized);
// (length, length, length, length)
XMVECTOR length = XMVectorSqrt(t0);
// Divide by the length to normalize.
normalized = XMVectorDivide(normalized, length);
// Set to zero when the original length is zero or infinity. In the
// latter case, this is considered to be an unexpected condition.
normalized = XMVectorAndInt(normalized, mask);
return normalized;
}
平台要求
Microsoft Visual Studio 2010 或 Microsoft Visual Studio 2012 与 Windows SDK for Windows 8。 支持 Win32 桌面应用、Windows 应用商店应用和 Windows Phone 8 应用。要求
要求 | 值 |
---|---|
目标平台 | Windows |
标头 | directxmath.h (包括 DirectXMath.h) |