XMVector3Normalize 函数 (directxmath.h)
返回 3D 矢量的规范化版本。
语法
XMVECTOR XM_CALLCONV XMVector3Normalize(
[in] FXMVECTOR V
) noexcept;
参数
[in] V
3D 矢量。
返回值
返回 V 的规范化版本。
备注
对于长度为 0 的向量,此函数返回零向量。 对于长度无限的向量,它将返回 QNaN 的向量。
请注意,对于大多数图形应用程序,确保向量具有明确定义的长度,不会导致规范化问题是常见的做法。 但是,如果需要适用于所有浮点输入的可靠规范化,可以改用以下代码:
inline XMVECTOR XMVector3NormalizeRobust( FXMVECTOR V )
{
// Compute the maximum absolute value component.
XMVECTOR vAbs = XMVectorAbs(V);
XMVECTOR max0 = XMVectorSplatX(vAbs);
XMVECTOR max1 = XMVectorSplatY(vAbs);
XMVECTOR max2 = XMVectorSplatZ(vAbs);
max0 = XMVectorMax(max0, max1);
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);
XMVECTOR t0 = XMVector3LengthSq(normalized);
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;
}
平台要求
带有 Windows SDK for Windows 8 的 Microsoft Visual Studio 2010 或 Microsoft Visual Studio 2012。 支持 Win32 桌面应用、Windows 应用商店应用和 Windows Phone 8 应用。要求
目标平台 | Windows |
标头 | directxmath.h (包括 DirectXMath.h) |