Freigeben über


XMVector4Normalize-Funktion (directxmath.h)

Gibt die normalisierte Version eines 4D-Vektors zurück.

Syntax

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

Parameter

[in] V

4D-Vektor.

Rückgabewert

Gibt die normalisierte Version von V zurück.

Hinweise

Für einen Vektor der Länge 0 gibt diese Funktion einen Nullvektor zurück. Für einen Vektor mit unendlicher Länge gibt er einen QNaN-Vektor zurück.

Beachten Sie, dass es bei den meisten Grafikanwendungen üblich ist, sicherzustellen, dass die Vektoren klar definierte Längen haben, die keine Probleme bei der Normalisierung verursachen. Wenn Sie jedoch eine stabile Normalisierung benötigen, die für alle Gleitkommaeingaben funktioniert, können Sie stattdessen den folgenden Code verwenden:


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;
}
    

Plattformanforderungen

Microsoft Visual Studio 2010 oder Microsoft Visual Studio 2012 mit dem Windows SDK für Windows 8. Unterstützt für Win32-Desktop-Apps, Windows Store-Apps und Windows Phone 8-Apps.

Anforderungen

Anforderung Wert
Zielplattform Windows
Kopfzeile directxmath.h (DirectXMath.h einschließen)

Weitere Informationen

Geometrische Funktionen der DirectXMath-Bibliothek für 4D-Vektoren

XMVector4NormalizeEst