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();
效果屬性
顯示名稱和索引列舉 | 描述 |
---|---|
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 位置。 此屬性是定義為:(point X、point 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。
注意
不過,如果您將 Cached 屬性設定為 true,則當縮放比例時,Anisotropic 模式會產生 mipmap,則每次針對足夠小的影像,都不會產生 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 |