XMVector4Normalize 関数 (directxmath.h)

4D ベクターの正規化されたバージョンを返します。

構文

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

パラメーター

[in] V

4D ベクター。

戻り値

正規化された バージョンの V を返します。

注釈

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

プラットフォームの要件

Microsoft Visual Studio 2010 または Microsoft Visual Studio 2012 と Windows SDK for Windows 8。 Win32 デスクトップ アプリ、Windows ストア アプリ、Windows Phone 8 アプリでサポートされます。

要件

要件
対象プラットフォーム Windows
ヘッダー directxmath.h (DirectXMath.h を含む)

こちらもご覧ください

DirectXMath ライブラリ 4D ベクタージオメトリック関数

XMVector4NormalizeEst