3D 変換の効果

3D 変換効果を使用して、任意の 4x4 変換行列を画像に適用します。

この効果は、次の計算を使用して、ソース イメージのコーナー頂点 ([ x y z 1 ]) に指定した行列 (M?) を適用します。

[ xr yr zr 1 ]=[ x y z 1 ]*M?

この効果の CLSID はCLSID_D2D13DTransform。

画像の例

変更前
変換前のイメージ。
クリック後
変換後のイメージ。
ComPtr<ID2D1Effect> D2D13DTransformEffect;
m_d2dContext->CreateEffect(CLSID_D2D13DTransform, &D2D13DTransformEffect);

D2D13DTransformEffect->SetInput(0, bitmap);

// You can use the helper methods in D2D1::Matrix4x4F to create common matrix transformations.
D2D1_MATRIX_4X4_F matrix = 
    D2D1::Matrix4x4F::Translation(0.0f, -192.0f, 0.0f) *
    D2D1::Matrix4x4F::RotationY(30.0f) *
    D2D1::Matrix4x4F::Translation(0.0f, 192.0f, 0.0f);

D2D13DTransformEffect->SetValue(D2D1_3DTRANSFORM_PROP_TRANSFORM_MATRIX, matrix);

m_d2dContext->BeginDraw();
m_d2dContext->DrawImage(D2D13DTransformEffect.Get());
m_d2dContext->EndDraw();

Effect プロパティ

表示名とインデックス列挙 Description
補間モード
D2D1_3DTRANSFORM_PROP_INTERPOLATION_MODE
効果がイメージで使用する補間モード。 品質と速度の範囲の5スケールモードがあります。
型がD2D1_3DTRANSFORM_INTERPOLATION_MODE。
既定値は D2D1_3DTRANSFORM_INTERPOLATION_MODE_LINEAR です。
BorderMode
D2D1_3DTRANSFORM_PROP_BORDER_MODE
イメージの境界線 (ソフトまたはハード) の計算に使用されるモード。 詳細については、「 罫線モード 」を参照してください。
型がD2D1_BORDER_MODE。
既定値は D2D1_BORDER_MODE_SOFT です。
TransformMatrix
D2D1_3DTRANSFORM_PROP_TRANSFORM_MATRIX
投影面に適用される 4x4 変換行列。 次の行列計算は、1 つの 3D 座標系から変換された 2D 座標系にポイントをマップするために使用されます。
3D 深度マトリックス どこ:
X、Y、Z = 入力投影平面座標
Mx,y = Transform Matrix 要素
X、Y、Z =出力投影平面座標

個々のマトリックス要素は境界付けされず、単位なしです。
型がD2D1_MATRIX_4X4_F。
既定値は Matrix4x4F(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1) です。

補間モード

列挙 説明
D2D1_3DTRANSFORM_INTERPOLATION_MODE_NEAREST_NEIGHBOR 最も近い単一点をサンプリングし、その点を使用します。 このモードでは処理時間は短くなりますが、最も低品質の画像が出力されます。
D2D1_3DTRANSFORM_INTERPOLATION_MODE_LINEAR 4 点サンプルと線形補間を使用します。 このモードでは、最も近い近隣モードよりも処理時間が長くなりますが、より高品質の画像が出力されます。
D2D1_3DTRANSFORM_INTERPOLATION_MODE_CUBIC 補間に 16 個のサンプル立方カーネルを使用します。 このモードでは最も処理時間が長くなりますが、より高品質の画像が出力されます。
D2D1_3DTRANSFORM_INTERPOLATION_MODE_MULTI_SAMPLE_LINEAR 1 つのピクセル内で 4 つの線形サンプルを使用して、優れたエッジアンチエイリアシングを行います。 このモードは、ピクセル数の少ない画像で少量のスケールダウンに適しています。
D2D1_3DTRANSFORM_INTERPOLATION_MODE_ANISOTROPIC 異方性フィルタリングを使用して、ビットマップの変換された形状に従ってパターンをサンプリングします。

注意

モードを選択しない場合、効果の既定値は D2D1_3DTRANSFORM_INTERPOLATION_MODE_LINEAR になります。

注意

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

罫線モード

名前 Description
D2D1_BORDER_MODE_SOFT 効果は、補間時に透明な黒いピクセルで画像を埋め込み、ソフトエッジになります。
D2D1_BORDER_MODE_HARD 効果は、入力イメージのサイズに出力をクランプします。

4x4 変換マトリックス クラス

Direct2D には、画像を 3 次元で変換するためのヘルパー関数を提供する 4x4 マトリックス クラスが用意されています。 すべてのクラス メンバーの詳細と説明については、「 Matrix4x4F 」トピックを参照してください。

機能 Description Matrix
Matrix4x4F::Scale(X, Y, Z) 投影面を X、Y、Z 方向にスケーリングする変換行列を生成します。 scale3d マトリックス
SkewX(X) 投影平面を X 方向に傾斜させる変換行列を生成します。 X 方向の傾斜行列を示します。
SkewY(Y) 投影平面を Y 方向に傾斜させる変換行列を生成します。 スキュー マトリックス
Translation(X, Y, Z) 投影面を X、Y、または Z 方向に平行移動する変換行列を生成します。 マトリックスの翻訳
RotationX(X) 投影面を X 軸を中心に回転する変換行列を生成します。 x 行列の回転
RotationY(Y) 投影面を Y 軸を中心に回転する変換行列を生成します。 y 行列の回転
RotationZ(Z) Z 軸を中心に投影面を回転させる変換行列を生成します。 z 行列の回転
PerspectiveProjection(D) 深度値が D のパースペクティブ変換。 パースペクティブ マトリックス
RotationArbitraryAxis(X, Y, Z, degrees) 投影面を指定した軸を軸回りで回転します。

要件

要件
サポートされている最小のクライアント Windows 7 のWindows 8とプラットフォーム更新プログラム [デスクトップ アプリ |Windows ストア アプリ]
サポートされている最小のサーバー Windows 7 のWindows 8とプラットフォーム更新プログラム [デスクトップ アプリ |Windows ストア アプリ]
ヘッダー d2d1effects.h
ライブラリ d2d1.lib、dxguid.lib

ID2D1Effect