Функция XMVector3Normalize (directxmath.h)

Возвращает нормализованную версию трехмерного вектора.

Синтаксис

XMVECTOR XM_CALLCONV XMVector3Normalize(
  [in] FXMVECTOR V
) noexcept;

Параметры

[in] V

Трехмерный вектор.

Возвращаемое значение

Возвращает нормализованную версию 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;
}
    

Требования к платформе

Microsoft Visual Studio 2010 или Microsoft Visual Studio 2012 с windows SDK для Windows 8. Поддерживается для классических приложений Win32, приложений Магазина Windows и Windows Phone 8 приложений.

Требования

   
Целевая платформа Windows
Header directxmath.h (включая DirectXMath.h)

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

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

XMVector3NormalizeEst