3D 透視投影変換の効果
3D パースペクティブ変換効果を使用して、距離から見た場合と同様に 3 次元で画像を回転させます。
3D パースペクティブ変換は、3D 変換効果よりも便利ですが、機能のサブセットのみを公開します。 完全な 3D 変換行列を計算し、 3D 変換効果を使用して、より任意の変換行列を画像に適用できます。
この効果の CLSID はCLSID_D2D13DPerspectiveTransform。
画像の例
変更前 |
---|
クリック後 |
ComPtr<ID2D1Effect> perspectiveTransformEffect;
m_d2dContext->CreateEffect(CLSID_D2D13DPerspectiveTransform, &perspectiveTransformEffect);
perspectiveTransformEffect->SetInput(0, bitmap);
perspectiveTransformEffect->SetValue(D2D1_3DPERSPECTIVETRANSFORM_PROP_PERSPECTIVE_ORIGIN, D2D1::Vector3F(0.0f, 192.0f, 0.0f));
perspectiveTransformEffect->SetValue(D2D1_3DPERSPECTIVETRANSFORM_PROP_ROTATION, D2D1::Vector3F(0.0f, 30.0f, 0.0f));
m_d2dContext->BeginDraw();
m_d2dContext->DrawImage(perspectiveTransformEffect.Get());
m_d2dContext->EndDraw();
Effect プロパティ
表示名とインデックス列挙 | Description |
---|---|
補間モード D2D1_3DPERSPECTIVETRANSFORM_PROP_INTERPOLATION_MODE |
効果がイメージで使用する補間モード。 品質と速度の範囲の5スケールモードがあります。 型がD2D1_3DPERSPECTIVETRANSFORM_INTERPOLATION_MODE。 既定値は D2D1_3DPERSPECTIVETRANSFORM_INTERPOLATION_MODE_LINEAR です。 |
BorderMode D2D1_3DPERSPECTIVETRANSFORM_PROP_BORDER_MODE |
イメージの境界線 (ソフトまたはハード) の計算に使用されるモード。 詳細については、「 罫線モード 」を参照してください。 型がD2D1_BORDER_MODE。 既定値は D2D1_BORDER_MODE_SOFT です。 |
奥行 D2D1_3DPERSPECTIVETRANSFORM_PROP_DEPTH |
PerspectiveOrigin から投影平面までの距離。 DIP で指定され、0 より大きい値である必要があります。 型は FLOAT です。 既定値は 1000.0f です。 |
PerspectiveOrigin D2D1_3DPERSPECTIVETRANSFORM_PROP_PERSPECTIVE_ORIGIN |
3D シーン内のビューアーの X と Y の位置。 このプロパティは、次のように定義D2D1_VECTOR_2Fです (ポイント X、ポイント Y)。 単位は DIP 単位です。 Z 値は Depth プロパティで設定します。 型がD2D1_VECTOR_2F。 既定値は {0.0f, 0.0f} です。 |
LocalOffset D2D1_3DPERSPECTIVETRANSFORM_PROP_LOCAL_OFFSET |
効果が投影面を回転する前に実行される平行移動。 このプロパティは、次のように定義D2D1_VECTOR_3Fです (X、Y、Z)。 単位は DIP 単位です。 型がD2D1_VECTOR_3F。 既定値は {0.0f、0.0f、0.0f} です。 |
GlobalOffset D2D1_3DPERSPECTIVETRANSFORM_PROP_GLOBAL_OFFSET |
効果が投影面を回転した後に実行される平行移動。 このプロパティは、次のように定義D2D1_VECTOR_3Fです (X、Y、Z)。 単位は DIP 単位です。 型がD2D1_VECTOR_3F。 既定値は {0.0f、0.0f、0.0f} です。 |
RotationOrigin D2D1_3DPERSPECTIVETRANSFORM_PROP_ROTATION_ORIGIN |
効果が実行する回転の中心点。 このプロパティは、次のように定義D2D1_VECTOR_3Fです (X、Y、Z)。 単位は DIP 単位です。 型がD2D1_VECTOR_3F。 既定値は {0.0f、0.0f、0.0f} です。 |
回転 D2D1_3DPERSPECTIVETRANSFORM_PROP_ROTATION |
各軸の回転角度。 このプロパティは、次のように定義D2D1_VECTOR_3Fです (X、Y、Z)。 単位は度単位です。 型がD2D1_VECTOR_3F。 既定値は {0.0f、0.0f、0.0f} です。 |
補間モード
列挙 | 説明 |
---|---|
D2D1_3DPERSPECTIVETRANSFORM_INTERPOLATION_MODE_NEAREST_NEIGHBOR | 最も近い単一点をサンプリングし、その点を使用します。 このモードでは処理時間は短くなりますが、最も低品質の画像が出力されます。 |
D2D1_3DPERSPECTIVETRANSFORM_INTERPOLATION_MODE_LINEAR | 4 点サンプルと線形補間を使用します。 このモードでは、最も近い近隣モードよりも処理時間が長くなりますが、より高品質の画像が出力されます。 |
D2D1_3DPERSPECTIVETRANSFORM_INTERPOLATION_MODE_CUBIC | 補間に 16 個のサンプル立方カーネルを使用します。 このモードでは最も処理時間が長くなりますが、より高品質の画像が出力されます。 |
D2D1_3DPERSPECTIVETRANSFORM_INTERPOLATION_MODE_MULTI_SAMPLE_LINEAR | 1 つのピクセル内で 4 つの線形サンプルを使用して、優れたエッジアンチエイリアシングを行います。 このモードは、ピクセル数の少ない画像で少量のスケールダウンに適しています。 |
D2D1_3DPERSPECTIVETRANSFORM_INTERPOLATION_MODE_ANISOTROPIC | 異方性フィルタリングを使用して、ビットマップの変換された形状に従ってパターンをサンプリングします。 |
注意
モードを選択しない場合、効果の既定値は D2D1_3DPERSPECTIVETRANSFORM_INTERPOLATION_MODE_LINEAR になります。
注意
異方性モードではスケーリング時にミップマップが生成されますが、この効果に入力される効果に対して Cached プロパティを true に設定すると、十分に小さい画像に対して毎回ミップマップが生成されることはありません。
罫線モード
Name | Description |
---|---|
D2D1_BORDER_MODE_SOFT | 効果は、補間時に透明な黒ピクセルで画像を埋め込み、ソフトエッジになります。 |
D2D1_BORDER_MODE_HARD | 効果は、入力画像のサイズに出力をクランプします。 |
出力ビットマップ
出力ビットマップのサイズは、イメージに適用される変換マトリックスによって異なります。
効果は変換操作を実行し、結果の周囲に境界ボックスを適用します。 出力ビットマップは、境界ボックスのサイズです。
必要条件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows 7 のWindows 8とプラットフォーム更新プログラム [デスクトップ アプリ |Windows ストア アプリ] |
サポートされている最小のサーバー | Windows 7 のWindows 8とプラットフォーム更新プログラム [デスクトップ アプリ |Windows ストア アプリ] |
ヘッダー | d2d1effects.h |
ライブラリ | d2d1.lib、dxguid.lib |