Fungsi XMVector4Normalize (directxmath.h)

Mengembalikan versi vektor 4D yang dinormalisasi.

Sintaks

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

Parameter

[in] V

Vektor 4D.

Nilai kembali

Mengembalikan versi V yang dinormalisasi.

Keterangan

Untuk vektor panjang 0, fungsi ini mengembalikan vektor nol. Untuk vektor dengan panjang tak terbatas, ia mengembalikan vektor QNaN.

Perhatikan bahwa untuk sebagian besar aplikasi grafis, memastikan vektor memiliki panjang yang terdefinisi dengan baik yang tidak menyebabkan masalah untuk normalisasi adalah praktik umum. Namun, jika Anda memerlukan normalisasi kuat yang berfungsi untuk semua input floating-point, Anda dapat menggunakan kode berikut sebagai gantinya:


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

Persyaratan Platform

Microsoft Visual Studio 2010 atau Microsoft Visual Studio 2012 dengan Windows SDK untuk Windows 8. Didukung untuk aplikasi desktop Win32, aplikasi Windows Store, dan aplikasi Windows Phone 8.

Persyaratan

Persyaratan Nilai
Target Platform Windows
Header directxmath.h (termasuk DirectXMath.h)

Lihat juga

Fungsi Geometri Vektor Pustaka DirectXMath 4D

XMVector4NormalizeEst