Sdílet prostřednictvím


Transformace (DirectComposition)

Poznámka

U aplikací ve Windows 10 doporučujeme místo DirectComposition používat rozhraní API pro Windows.UI.Composition. Další informace najdete v tématu Modernizace desktopové aplikace pomocívrstvy vizuálu .

Toto téma popisuje podporu aplikace Microsoft DirectComposition pro dvojrozměrné (2D) transformace affinu (lineární) a popisuje typy transformací, které DirectComposition podporuje.

DirectComposition také podporuje 3D perspektivní transformace, ale protože vyžadují vytvoření přechodného rastrového obrázku, DirectComposition je považuje za efekty, nikoli transformace. Informace o 3D perspektivní transformační efekty naleznete v tématu Efekty.

Toto téma obsahuje následující části:

Co je transformace DirectComposition 2D?

2D transformace umožňuje změnit pozici, velikost nebo povahu vizuálu ve dvou dimenzích přesunutím vizuálu do jiného umístění (překlad), zvětšením nebo zmenšením (měřítkem), otočením (otočením) nebo zkreslením jeho tvaru (skewing).

2D transformace se dosahuje mapováním bodů vizuálu z jedné pozice do druhé ve stejném souřadnicovém prostoru nebo z jednoho prostoru souřadnic do druhého. Toto mapování popisuje tabulka hodnot označovaná jako transformační matice definovaná jako kolekce tří řádků se třemi sloupci hodnot s plovoucí desetinou čárkou, jak je znázorněno v následující tabulce.

M11Default: 1.0
M21Default: 0.0
M31OffsetX: 0.0

M12Default: 0.0
M22Default: 1.0
M32Offsety: 0.0

0.0
0.0
1.0

Transformační matice pro affine 2D transformace je matice 3 po 2, která vynechá třetí sloupec z předchozí transformační matice. Následující tabulka ukazuje rozložení této matice.

M11Default: 1.0
M21Default: 0.0
M31OffsetX: 0.0

M12Default: 0.0
M22Default: 1.0
M32Offsety: 0.0

Poznámka

DirectComposition při použití 2D transformací na stereo obsah neprovádí žádné speciální zpracování. To znamená, že 3D obsah může být zkreslený, když se na něj použije 2D transformace.

Prostor souřadnic DirectComposition 2D

DirectComposition používá prostor souřadnic 2D s levým rukou; to znamená, že kladné hodnoty osy X se zvětší vpravo a kladné hodnoty osy y se zvětší směrem dolů. Vizuály jsou umístěny vzhledem k počátku, což je bod, kde se osa x a y protínají (0, 0), jak je znázorněno na následujícím obrázku.

osu x a osu y levého prostoru souřadnic

Díky manipulaci s hodnotami v matici transformace 3 po 2 můžete otočit, škálovat, zkosit a přeložit objekt ve dvou dimenzích. Pokud například nastavíte OffsetX na 100 a OffsetY na 200, přesunete objekt do pravého 100 pixelů a dolů o 200 pixelů.

Podpora 2D transformací affine

Následující tabulka popisuje typy transformací affine 2D, které podporuje DirectComposition, a uvádí rozhraní, která můžete použít k provádění různých typů transformací.

Transformace nebo rozhraní Popis Ilustrace
Otočení 2D IDCompositionRotateTransform otočí vizuál o zadaný úhel o zadaný středový bod. ilustraci čtverce otočené o 45 stupňů ve směru hodinových ručiček kolem středu původního čtverce
Škálování 2D idCompositionScaleTransform škáluje vizuál podle zadaného faktoru o zadaném středovém bodu. ilustrace čtvercového měřítka 130 %
Nerovnoměrná distribuce 2D IDCompositionSkewTransform zkosení vizuálu podle zadaného úhlu podél osy x a osy y a kolem zadaného středového bodu. ilustrace čtvercového zkosené 30 stupňů proti směru hodinových ručiček z osy y
Překlad 2D IDCompositionTranslateTranslateTransform změňte umístění vizuálu ve směru osy x a osy y. ilustrace čtvercového posunutého 20 jednotek podél kladné osy x a 10 jednotek podél kladné osy y

Maticové 2D transformace

Rozhraní IDCompositionMatrixTransform umožňuje definovat vlastní 3-by-2 affine 2D transformační matici a použít ji na vizuál. Toto rozhraní je užitečné, pokud potřebujete použít typ transformace affine 2D, která není k dispozici prostřednictvím jiných rozhraní transformace DirectComposition. Matici definujete vyplněním struktury D2D_MATRIX_3X2_F a jejím předáním do IDCompositionMatrixTransform::SetMatrix metoda.

Transformace skupin

Pomocí transformační skupiny můžete zkombinovat více transformací do jedné. Skupina transformací definuje kolekci transformačního objektu, jejichž matice jsou vynásobeny v pořadí, v jakém jsou zadány v kolekci. Výsledná transformační matice se pak použije u vizuálu. Skupina transformací vytvoří stejný výsledek jako použití každé transformace samostatně.

Mějte na paměti, že pořadí transformovaných objektů ve skupině transformací je důležité. Pokud je například vizuál napřed otočený, pak škálovaný a přeložený, výsledek se liší od toho, jestli je vizuál poprvé přeložený, otočený a potom škálovaný. DirectComposition vždy použije transformace na vizuál v pořadí, ve kterém jsou zadány v kolekci.

Pokud chcete vytvořit skupinu transformací, nejprve vytvořte objekty transformace, které chcete zahrnout do skupiny, a pak předejte pole ukazatelů objektu transformace do IDCompositionDevice::CreateTransformGroup metoda. Po vytvoření skupiny transformace nemůžete přidat ani odebrat žádné transformační objekty. Můžete ale upravit vlastnosti jednotlivých transformačních objektů v kolekci a změny se projeví ve výsledné matici transformace.

Transformace animace

Vlastnosti transformace mohou být animované. Pokud je vlastnost animovaný, DirectComposition změní hodnotu vlastnosti v průběhu času, nikoli najednou. To je zvlášť užitečné při vytváření přechodů. Další informace naleznete v tématu animace.