3D 透視轉換效果
使用 3D 透視轉換效果來旋轉 3 維度中的影像,就像從距離檢視一樣。
3D 透視轉換比 3D 轉換效果更方便,但只會公開功能的子集。 您可以計算完整的 3D 轉換矩陣,並使用 3D 轉換 效果將更任意的轉換矩陣套用至影像。
此效果的 CLSID CLSID_D2D13DPerspectiveTransform。
範例影像
之前 |
---|
After |
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();
效果屬性
顯示名稱和索引列舉 | 描述 |
---|---|
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 位置。 此屬性是定義為: (點 X、點 Y) 的D2D1_VECTOR_2F。 單位以 DIP 為單位。 您可以使用 Depth 屬性來設定 Z 值。 類型為 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 | 使用四個點樣本和線性插補。 此模式使用比最接近鄰近模式更多的處理時間,但輸出品質較高的影像。 |
D2D1_3DPERSPECTIVETRANSFORM_INTERPOLATION_MODE_CUBIC | 使用 16 個樣本立方核心進行插補。 此模式會使用最多處理時間,但會輸出品質較高的影像。 |
D2D1_3DPERSPECTIVETRANSFORM_INTERPOLATION_MODE_MULTI_SAMPLE_LINEAR | 在單一圖元內使用 4 個線性樣本,以取得良好的邊緣反鋸齒。 此模式適用于在具有少量圖元的影像上相應減少。 |
D2D1_3DPERSPECTIVETRANSFORM_INTERPOLATION_MODE_ANISOTROPIC | 使用等向性篩選,根據點陣圖的轉換圖形來取樣圖樣。 |
注意
如果您未選取模式,效果預設為D2D1_3DPERSPECTIVETRANSFORM_INTERPOLATION_MODE_LINEAR。
注意
不過,當您調整時,非等向性模式會在縮放時產生 Mipmap,不過,如果您在輸入至此效果的效果上將 Cached 屬性設定為 true,則每次針對足夠小的影像不會產生 mipmap。
框線模式
名稱 | 描述 |
---|---|
D2D1_BORDER_MODE_SOFT | 效果會在影像插補時以透明黑色圖元填補影像,因而產生柔邊。 |
D2D1_BORDER_MODE_HARD | 效果會將輸出限制為輸入影像的大小。 |
輸出點陣圖
輸出點陣圖的大小取決於套用至影像的轉換矩陣。
效果會執行轉換作業,然後在結果周圍套用周框方塊。 輸出點陣圖是周框方塊的大小。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | 適用于 Windows 7 的 Windows 8 和平臺更新 [傳統型應用程式 |Windows 市集應用程式] |
最低支援的伺服器 | 適用于 Windows 7 的 Windows 8 和平臺更新 [傳統型應用程式 |Windows 市集應用程式] |
標頭 | d2d1effects.h |
程式庫 | d2d1.lib、dxguid.lib |