3D transformační efekt
Pomocí 3D transformačního efektu můžete na obrázek použít libovolnou 4x4 transformační matici.
Tento efekt použije matici (M?), kterou zadáte na rohové vrcholy zdrojového obrázku ([ x y z 1 ]) pomocí tohoto výpočtu:
[ xr yr zr 1 ]=[ x y z 1 ]*M?
CLSID pro tento efekt je CLSID_D2D13DTransform.
- příklad obrázku
-
vlastnosti efektu
- režimy interpolace
- režimy ohraničení
- 4x4 transformační třída
- požadavky na
- související témata
Příklad obrázku
Před |
---|
![]() |
Po |
![]() |
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();
Vlastnosti efektu
Zobrazovaný název a výčet indexu | Popis |
---|---|
InterpolationMode D2D1_3DTRANSFORM_PROP_INTERPOLATION_MODE |
Režim interpolace, který efekt používá na obrázku. Existuje 5 režimů škálování, které jsou v rozsahu kvality a rychlosti. Typ je D2D1_3DTRANSFORM_INTERPOLATION_MODE. Výchozí hodnota je D2D1_3DTRANSFORM_INTERPOLATION_MODE_LINEAR. |
BorderMode D2D1_3DTRANSFORM_PROP_BORDER_MODE |
Režim použitý k výpočtu ohraničení obrázku, měkkého nebo pevného. Další informace najdete v režimech ohraničení. Typ je D2D1_BORDER_MODE. Výchozí hodnota je D2D1_BORDER_MODE_SOFT. |
TransformMatrix D2D1_3DTRANSFORM_PROP_TRANSFORM_MATRIX |
Transformační matice 4x4 použitá na rovinu projekce. Následující výpočet matice slouží k mapování bodů z jednoho 3D souřadnicového systému na transformovaný 2D souřadnicový systém. ![]()
Mx,y = Transformovat maticové prvky X , Y , Z = výstupní souřadnice roviny projekce Jednotlivé prvky matice nejsou ohraničené a jsou bez jednotkové. Typ je D2D1_MATRIX_4X4_F. Výchozí hodnota je Matice4x4F(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1). |
Režimy interpolace
Výčet | Popis |
---|---|
D2D1_3DTRANSFORM_INTERPOLATION_MODE_NEAREST_NEIGHBOR | Vzorkuje nejbližší jeden bod a použije ho. Tento režim používá méně času zpracování, ale vypíše nejnižší kvalitu obrázku. |
D2D1_3DTRANSFORM_INTERPOLATION_MODE_LINEAR | Používá čtyřbodový vzorek a lineární interpolaci. Tento režim používá více času zpracování než režim nejbližšího souseda, ale vypíše image s vyšší kvalitou. |
D2D1_3DTRANSFORM_INTERPOLATION_MODE_CUBIC | Pro interpolaci se používá 16 vzorové krychlové jádro. Tento režim používá nejvíce času zpracování, ale výstupy image s vyšší kvalitou. |
D2D1_3DTRANSFORM_INTERPOLATION_MODE_MULTI_SAMPLE_LINEAR | Používá 4 lineární vzorky v jednom pixelu pro dobrý anti-aliasing okrajů. Tento režim je vhodný pro vertikální snížení kapacity o malé množství na obrázcích s několika pixely. |
D2D1_3DTRANSFORM_INTERPOLATION_MODE_ANISOTROPIC | Používá anisotropní filtrování k vzorkování vzorku podle transformovaného tvaru rastrového obrázku. |
Poznámka
Pokud režim nevyberete, efekt se ve výchozím nastavení D2D1_3DTRANSFORM_INTERPOLATION_MODE_LINEAR.
Poznámka
Anisotropní režim generuje mipmapy při škálování, ale pokud nastavíte Cached vlastnost true na efekty, které jsou vstupy do tohoto efektu, mipmapy nebudou generovány pokaždé, když pro dostatečně malé obrázky.
Režimy ohraničení
Jméno | Popis |
---|---|
D2D1_BORDER_MODE_SOFT | Efekt vloží obrázek s průhlednými černými pixely při interpolaci, což vede k měkkému okraji. |
D2D1_BORDER_MODE_HARD | Efekt uchytá výstup na velikost vstupního obrázku. |
Transformační třída 4x4
Direct2D poskytuje třídu matice 4x4, která poskytuje pomocné funkce pro transformaci obrázku ve 3 dimenzích. Další informace a popis všech členů třídy najdete v tématu Matrix4x4F.
Funkce | Popis | Matice |
---|---|---|
Matice4x4F::Scale(X, Y, Z) | Vygeneruje transformační matici, která škáluje rovinu projekce ve směru X, Y a/nebo Z. | matice se škálováním na více instancí |
Nerovnoměrná distribuce (X) | Vygeneruje transformační matici, která zkosí rovinu projekce ve směru X. |
![]() |
Nerovnoměrná distribuce(Y) | Vygeneruje transformační matici, která zkosí rovinu projekce ve směru Y. | nerovnoměrné distribuce |
Translation(X, Y, Z) | Vygeneruje transformační matici, která přeloží rovinu projekce ve směru X, Y nebo Z. |
![]() |
RotationX(X) | Vygeneruje transformační matici, která otočí rovinu projekce o osu X. |
![]() |
Rotationy(Y) | Vygeneruje transformační matici, která otočí rovinu projekce o osu Y. |
![]() |
RotationZ(Z) | Vygeneruje transformační matici, která otočí rovinu projekce o osu Z. |
![]() |
PerspectiveProjection(D) | Perspektivní transformace s hloubkovou hodnotou D. | |
RotationArbitraryAxis(X, Y, Z, stupně) | Otočí rovinu projekce o osu, kterou zadáte. |
Požadavky
Požadavek | Hodnota |
---|---|
Minimální podporovaný klient | Windows 8 a Aktualizace platformy pro Windows 7 [desktopové aplikace | Aplikace pro Windows Store] |
Minimální podporovaný server | Windows 8 a Aktualizace platformy pro Windows 7 [desktopové aplikace | Aplikace pro Windows Store] |
Záhlaví | d2d1effects.h |
Knihovna | d2d1.lib, dxguid.lib |