XMVectorSelect 関数 (directxmath.h)

2 つの入力ベクトル間でコンポーネントごとの選択を実行し、結果のベクターを返します。

構文

XMVECTOR XM_CALLCONV XMVectorSelect(
  [in] FXMVECTOR V1,
  [in] FXMVECTOR V2,
  [in] FXMVECTOR Control
) noexcept;

パラメーター

[in] V1

比較する最初のベクトル。

[in] V2

比較する 2 番目のベクトル。

[in] Control

V1 または V2 からベクトル コンポーネントを選択するために使用されるベクター マスク。 Control のコンポーネントが 0 の場合、返されるベクターの対応するコンポーネントが最初のベクターのコンポーネントになります。 Control のコンポーネントが0xFF場合、返されるベクターの対応するコンポーネントが 2 番目のベクターのコンポーネントになります。 ベクター マスクのしくみの詳細については、「解説」を参照してください。

通常、Control に使用されるベクターは、ベクター比較関数 (XMVectorEqualXMVectorLess、XMVectorGreater など) の出力か、XMVectorSelectControl の出力になります。

戻り値

コンポーネントごとの選択の結果を返します。

解説

Control の特定のビットが設定されている場合は、V2 の対応するビットが使用されます。それ以外の場合は、V1 の対応するビットが使用されます。 次の擬似コードは、 関数の操作を示しています。

XMVECTOR Result;

Result.u[0] = (V1.u[0] & ~Control.u[0]) | (V2.u[0] & Control.u[0]);
Result.u[1] = (V1.u[1] & ~Control.u[1]) | (V2.u[1] & Control.u[1]);
Result.u[2] = (V1.u[2] & ~Control.u[2]) | (V2.u[2] & Control.u[2]);
Result.u[3] = (V1.u[3] & ~Control.u[3]) | (V2.u[3] & Control.u[3]);

return Result;

制御ベクトルを手動で構築する必要はありません。 適切な制御ベクトルを構築するには、次の 2 つの簡単な方法があります。

  • XMVectorSelectControl 関数を使用してコントロール ベクターを構築する。

    この関数の使用方法のデモについては、「 XMVectorSelect と XMVectorSelectControl の使用 」を参照してください。

  • 制御ベクトルは、XM_SELECT_[0,1] 定数を使用して構築できます ( 「DirectXMath ライブラリ定数」を参照)。 たとえば、擬似コードでは、 要素を持つ Control のインスタンスが次のようになります。
       Control = { XM_SELECT_0,   XM_SELECT_1,   XM_SELECT_0,   XM_SELECT_1 }
    

    は、V1V2 の次のコンポーネントを含むベクター Result を返します

       Result = { V1.X,  V2.Y,   V1.Z,   V2.W }
    

プラットフォームの要件

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

要件

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

関連項目

コンポーネントごとのベクトル関数

XMVectorSelectControl