Bagikan melalui


Fungsi XMVector3Normalize (directxmath.h)

Mengembalikan versi vektor 3D yang dinormalisasi.

Sintaks

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

Parameter

[in] V

Vektor 3D.

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 yang kuat yang berfungsi untuk semua input floating-point, Anda dapat menggunakan kode berikut sebagai gantinya:


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

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

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

Lihat juga

Pustaka DirectXMath Fungsi Geometrik Vektor 3D

XMVector3NormalizeEst