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 포함) |