XMVector3Normalize 関数 (directxmath.h)
3D ベクターの正規化されたバージョンを返します。
構文
XMVECTOR XM_CALLCONV XMVector3Normalize(
[in] FXMVECTOR V
) noexcept;
パラメーター
[in] V
3D ベクター。
戻り値
正規化されたバージョンの V を返します。
解説
長さ 0 のベクトルの場合、この関数は 0 ベクトルを返します。 無限長のベクトルの場合、QNaN のベクトルを返します。
ほとんどのグラフィックス アプリケーションでは、ベクトルに正規化の問題を引き起こさない明確に定義された長さを確保することが一般的な方法であることに注意してください。 ただし、すべての浮動小数点入力に対して機能する堅牢な正規化が必要な場合は、代わりに次のコードを使用できます。
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;
}
プラットフォームの要件
Windows SDK for Windows 8 を使用する Microsoft Visual Studio 2010 または Microsoft Visual Studio 2012。 Win32 デスクトップ アプリ、Windows ストア アプリ、Windows Phone 8 アプリでサポートされます。要件
対象プラットフォーム | Windows |
ヘッダー | directxmath.h (DirectXMath.h を含む) |