次の方法で共有


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 プロパティ

表示名とインデックス列挙 形容
InterpolationMode
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
効果が投影面を回転する前に実行される平行移動。 このプロパティは、(X、Y、Z) として定義されたD2D1_VECTOR_3Fです。 単位は DIP 単位です。
型はD2D1_VECTOR_3F。
既定値は {0.0f、0.0f、0.0f} です。
GlobalOffset
D2D1_3DPERSPECTIVETRANSFORM_PROP_GLOBAL_OFFSET
効果が投影面を回転した後に実行される平行移動。 このプロパティは、(X、Y、Z) として定義されたD2D1_VECTOR_3Fです。 単位は DIP 単位です。
型はD2D1_VECTOR_3F。
既定値は {0.0f、0.0f、0.0f} です。
RotationOrigin
D2D1_3DPERSPECTIVETRANSFORM_PROP_ROTATION_ORIGIN
効果が実行する回転の中心点。 このプロパティは、(X、Y、Z) として定義されたD2D1_VECTOR_3Fです。 単位は DIP 単位です。
型はD2D1_VECTOR_3F。
既定値は {0.0f、0.0f、0.0f} です。
自転
D2D1_3DPERSPECTIVETRANSFORM_PROP_ROTATION
各軸の回転角度。 このプロパティは、(X、Y、Z) として定義されたD2D1_VECTOR_3Fです。 単位は度単位です。
型は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 個のサンプル 3 次カーネルを使用します。 このモードでは最も処理時間が長くなりますが、より高品質の画像が出力されます。
D2D1_3DPERSPECTIVETRANSFORM_INTERPOLATION_MODE_MULTI_SAMPLE_LINEAR 1 つのピクセル内で 4 つの線形サンプルを使用して、優れたエッジアンチエイリアシングを行います。 このモードは、ピクセル数が少ない画像で少量スケールダウンする場合に適しています。
D2D1_3DPERSPECTIVETRANSFORM_INTERPOLATION_MODE_ANISOTROPIC 異方性フィルタリングを使用して、ビットマップの変換された形状に従ってパターンをサンプリングします。

手記

モードを選択しない場合、効果は既定でD2D1_3DPERSPECTIVETRANSFORM_INTERPOLATION_MODE_LINEARされます。

手記

異方性モードではスケーリング時にミップマップが生成されますが、この効果に入力される効果に対して Cached プロパティを true に設定すると、十分に小さい画像に対して毎回ミップマップが生成されることはありません。

罫線モード

名前 形容
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