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