Функция 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)

См. также раздел

4D-векторные геометрические функции библиотеки DirectXMath

XMVector4NormalizeEst