Share via


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

ID2D1Effect