Sdílet prostřednictvím


Efekty (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 základy efektů Microsoft DirectComposition a popisuje typy efektů, které DirectComposition podporuje.

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

Co je efekt DirectComposition?

DirectComposition efekt je rastrová operace, která se použije při rasterizaci vizuálu, aby se změnil vzhled vizuálu nějakým způsobem.

DirectComposition vytvoří efekt tak, že před použitím efektu vezme podstrom vizuálu a vykresluje ho do jednoho rastrového obrázku. Pokud například chcete vytvořit 3D perspektivní transformační efekt, DirectComposition vytvoří obrázek vizuálního dílčího stromu a pak strukturuje obrázek na 3D rovinu, která se transformuje podle výsledné matice efektu 3D transformace.

DirectComposition podporuje následující typy efektů.

Typ efektu Popis
neprůhlednost Nastaví neprůhlednost celého vizuálu.
transformace 3D perspektivy Použije prostorový (3D) transformační efekt na vizuál.

 

Poznámka

DirectComposition při použití efektů na 3D stereo obsah nijak nezpracovává. To znamená, že 3D obsah může být zkreslený, když se na něj použije efekt.

 

Neprůhlednost

Efekt neprůhlednosti umožňuje nastavit faktor neprůhlednosti, který se použije pro celý vizuál při vykreslení vizuálu. Liší se od alfa masky v tom, že stejný neprůhledný faktor se použije na všechny pixely ve vizuálu. Neprůhlednost je určená jako hodnota od 0 (zcela průhledné) do 1 (zcela neprůhledné).

Faktor neprůhlednosti se použije z nadřazeného na podřízené vizuály, ale viditelné efekty nastavení vnořené neprůhlednosti nejsou uvedeny v hodnotě vlastnosti jednotlivých podřízených vizuálů. Pokud má například kořenový vizuál neprůhlednost 50% (0,5) a jeden z jeho podřízených objektů má neprůhlednost 20% (0,2), čistá neprůhlednost pro toto dítě se zobrazí jako 10% (0,1), ale hodnota vlastnosti neprůhlednosti dítěte bude stále 0,2.

Efekty transformace 3D perspektivy

Tato část popisuje souřadnicový prostor, který DirectComposition používá k provádění 3D perspektivní transformační efekty. Popisuje také typy transformačních efektů 3D perspektivy, které DirectComposition podporuje.

Poznámka

V DirectComposition nefunguje použití 3D efektů na více úrovní ve vizuálním stromu stejným způsobem jako u 3D modulu, jako je Například Microsoft Direct3D. Představte si například nadřazený vizuál, který má jeden podřízený vizuál. Pokud se podřízený vizuál otočí dopředu směrem z (kolem osy y) o 90 stupňů, bude okraj podřízeného vizuálního okraje čelit prohlížeči, a proto očekáváme, že vizuál nebude viditelný (protože rastrový obrázek nemá skutečnou hloubku). Pokud je nadřazený vizuál potom otočený zpět v záporném směru z (kolem osy y) o 90 stupňů, můžeme očekávat, že se podřízený vizuál plně zobrazí (protože transformace se navzájem negují). V DirectComposition to však není případ. Podřízený vizuál nebude viditelný, protože byl "zploštěný do" nadřazeného rastrového obrázku.

 

Prostor souřadnic DirectComposition 3D

Souřadnicový prostor DirectComposition pro 3D transformační efekty vyhledá původ (0,0,0) v levém horním rohu rastrového povrchu s pozitivními hodnotami osy x, které se posunou doprava, kladné hodnoty osy y směrem dolů a kladné hodnoty osy Z směrem od počátku směrem k prohlížeči. Tento obrázek znázorňuje prostor souřadnic DirectComposition 3D.

3d souřadnicový prostor

3D transformační efekt otočení

3D transformační efekt otočí vizuál ve třech rozměrech podle zadaného úhlu o vektoru osy otáčení [x,y,z] umístěného v zadaném středovém bodu (x,y,z). Úhel je určen ve stupních. Výchozí vektor osy otáčení je [0,0,-1] a výchozí středový bod je (0,0,0).

Pomocí metody IDCompositionDevice::CreateRotateTransform3D vytvořte objekt transformace 3D otočení. Metoda načte IDCompositionRotateTransform3D rozhraní, které můžete použít k nastavení vlastností objektu.

3D efekt transformace měřítka

Efekt transformace 3D škálování zvětší nebo zmenší vizuál. Škáluje vizuál ve směru [x,y,z] o středovém bodu (x,y,z). Výchozí středový bod je (0 0,0).

Pomocí metody IDCompositionDevice::CreateScaleTransform3D vytvořte objekt transformace 3D škálování. Metoda načte IDCompositionScaleTransform3D rozhraní, které můžete použít k nastavení vlastností objektu.

Efekt transformace 3D překladu

Efekt transformace 3D překladu změní pozici vizuálu ve směru [x,y,z].

Pomocí metody IDCompositionDevice::CreateTranslateTransform3D vytvořte objekt transformace 3D překladu. Metoda načte IDCompositionTranslateTranslateTransform3D rozhraní, které můžete použít k nastavení vlastností objektu.

3D maticový transformační efekt

Rozhraní IDCompositionMatrixTransform3D umožňuje definovat vlastní transformační matici 4 po 4 a použít ji u vizuálu. Toto rozhraní je užitečné, pokud potřebujete použít typ 3D perspektivního transformační efekt, který není k dispozici prostřednictvím jiných rozhraní efektu transformace DirectComposition 3D. Matici definujete vyplněním struktury D3DMATRIX a jejím předáním do metody IDCompositionMatrixTransform3D::SetMatrix. Alternativně můžete nastavit každý prvek matice pomocí IDCompositionMatrixTransform3D::SetMatrixElement metoda.

Skupina efektu transformace 3D

IDCompositionDevice::CreateTransform3DGroup vytvoří kolekci 3D transformačních efektů, které můžete použít u vizuálu jako skupiny. Pole může obsahovat libovolný počet transformovaných objektů a může zahrnovat matici, otočení, měřítko a překlad transformací. Kolekce 3D transformačních objektů má za následek transformaci, jejíž hodnotou je násobení matic jednotlivých matic transformací v kolekci.

Pořadí jednotlivých transformací ve skupině je důležité. Pokud například poprvé otočíte, pak škálujete, přeložíte, dostanete jiný výsledek než při prvním překladu, pak otočíte a pak škálujete. DirectComposition respektuje pořadí, ve kterém zadáte 3D transformace v rámci transformační 3D skupiny stejným způsobem jako u 2D transformací. Transformace 3D perspektivy navíc vedou k zploštění stromu vizuálu po použití všech 3D transformací v aktuálním vizuálu. Tím zajistíte, aby scéna vypadala co nejblíže 3D.

Efektní objekty

Chcete-li použít efekt u vizuálu, musíte nejprve vytvořit a nastavit vlastnosti objektu efektu, který představuje typ efektu, který chcete vytvořit ve vizuálu. Pak musíte použít objekt efektu na vlastnost Efekt vizuálu.

Chcete-li vytvořit objekt efektu, použijte jeden z následujících IDCompositionDevice metody rozhraní vytvořit efekt objekt pro typ efektu, který chcete. Následující metody vytvářejí objekty efektu:

Každá z předchozích metod načte rozhraní, které můžete použít k nastavení vlastností nově vytvořeného objektu efektu. Pomocí metod rozhraní nastavte vlastnosti podle potřeby k vytvoření požadovaného vizuálního efektu.

Většinu vlastností objektu efektu je možné animovat. Chcete-li animovat určitou vlastnost, vytvořte animační objekt a použijte ho na vlastnost, kterou chcete animovat; v opačném případě nastavte vlastnost na statickou hodnotu, která vytvoří požadovaný efekt. Další informace o animaci vlastností naleznete v tématu Animace.

Chcete-li použít objekt efektu na vizuál, zavolejte IDCompositionVisual::SetEffect metoda. Když u vizuálu použijete efekt, použije se efekt na celý podstrom vizuálu v kořenovém kořenu daného vizuálu. Pokud například nastavíte neprůhlednost vizuálu na 50 procent, zmenší se neprůhlednost všech podřízených vizuálů v podstromu vizuálu o 50 %. Stejný objekt efektu můžete použít u jednoho nebo více vizuálů. Pokud po použití na vizuály upravíte vlastnosti objektu efektu, všechny vizuály se znovu skládají, aby odrážely změnu.

Pomocí objektu skupiny efektů můžete současně použít více efektů na vizuál. Nejprve zavolejte IDCompositionDevice::CreateEffectGroup vytvořit objekt skupiny efektů a potom přidat efekty do skupiny pomocí IDCompositionEffectGroup rozhraní objektu.

koncepty DirectComposition