Функция 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 для Windows 8. Поддерживается для классических приложений Win32, приложений Магазина Windows и приложений Windows Phone 8.Требования
Требование | Значение |
---|---|
Целевая платформа | Windows |
Header | directxmath.h (включая DirectXMath.h) |