다음을 통해 공유


XMVector4Normalize 함수(directxmath.h)

4D 벡터의 정규화된 버전을 반환합니다.

구문

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

매개 변수

[in] V

4D 벡터입니다.

반환 값

정규화된 V 버전을 반환합니다.

설명

길이가 0인 벡터의 경우 이 함수는 0 벡터를 반환합니다. 길이가 무한인 벡터의 경우 QNaN의 벡터를 반환합니다.

대부분의 그래픽 애플리케이션에서는 벡터에 정규화에 문제가 발생하지 않는 길이가 잘 정의되어 있는지 확인하는 것이 일반적입니다. 그러나 모든 부동 소수점 입력에 대해 작동하는 강력한 정규화가 필요한 경우 대신 다음 코드를 사용할 수 있습니다.


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

플랫폼 요구 사항

Windows 8 Windows SDK를 사용하는 Microsoft Visual Studio 2010 또는 Microsoft Visual Studio 2012. Win32 데스크톱 앱, Windows 스토어 앱 및 Windows Phone 8개 앱에 지원됩니다.

요구 사항

요구 사항
대상 플랫폼 Windows
헤더 directxmath.h(DirectXMath.h 포함)

추가 정보

DirectXMath 라이브러리 4D 벡터 기하학적 함수

XMVector4NormalizeEst