Udostępnij przez


Efekty (DirectComposition)

Nuta

W przypadku aplikacji w systemie Windows 10 zalecamy używanie interfejsów API Windows.UI.Composition zamiast directComposition. Aby uzyskać więcej informacji, zobacz Modernizuj aplikację klasyczną przy użyciu warstwy wizualnej.

W tym temacie omówiono podstawy efektów microsoft DirectComposition i opisano typy efektów, które obsługuje DirectComposition.

Ten temat zawiera następujące sekcje:

Co to jest efekt DirectComposition?

Efekt DirectComposition to operacja mapy bitowej, która jest stosowana podczas rasteryzacji wizualizacji w celu zmiany wyglądu wizualizacji w jakiś sposób.

Funkcja DirectComposition tworzy efekt, przyjmując poddrzewo wizualne i renderując je w jedną mapę bitową przed zastosowaniem efektu. Na przykład w celu utworzenia efektu przekształcenia perspektywy 3D funkcja DirectComposition tworzy obraz drzewa podrzędnego wizualizacji, a następnie teksturuje obraz na płaszczyźnie 3D, która jest przekształcana zgodnie z wynikową macierzą efektu transformacji 3D.

Funkcja DirectComposition obsługuje następujące typy efektów.

Typ efektu Opis
nieprzezroczystości Ustawia nieprzezroczystość całej wizualizacji.
transformacja perspektywy 3D Stosuje efekt przekształcenia perspektywy trójwymiarowej (3D) do wizualizacji.

 

Nuta

Funkcja DirectComposition nie wykonuje specjalnego przetwarzania podczas stosowania efektów do zawartości stereo 3D. Oznacza to, że zawartość 3D może wydawać się zniekształcona po zastosowaniu efektu.

 

Nieprzezroczystość

Efekt nieprzezroczystości umożliwia ustawienie współczynnika nieprzezroczystości stosowanego do całej wizualizacji podczas renderowania wizualizacji. Różni się ona od maski alfa w tym, że ten sam współczynnik nieprzezroczystości jest stosowany do wszystkich pikseli w wizualizacji. Nieprzezroczystość jest określana jako wartość z zakresu od 0 (całkowicie przezroczysta) do 1 (całkowicie nieprzezroczyste).

Współczynnik nieprzezroczystości jest stosowany z elementów nadrzędnych do wizualizacji podrzędnych, ale widoczne efekty zagnieżdżonych ustawień nieprzezroczystości nie są wskazywane w wartości właściwości poszczególnych wizualizacji podrzędnych. Jeśli na przykład wizualizacja główna ma nieprzezroczystość 50% (0,5), a jedno z jej elementów podrzędnych ma nieprzezroczystość 20% (0,2), nieprzezroczystość netto dla tego dziecka jest renderowana jako 10% (0,1), ale wartość właściwości nieprzezroczystości dziecka będzie nadal wynosić 0,2.

Efekty transformacji perspektywy 3D

W tej sekcji opisano przestrzeń współrzędnych używaną przez directComposition do wykonywania efektów transformacji perspektywy 3D. Opisuje również typy efektów transformacji perspektywy 3D, które obsługuje DirectComposition.

Nuta

W trybie DirectComposition stosowanie efektów 3D do wielu poziomów w drzewie wizualizacji nie działa w taki sam sposób, jak w przypadku pełnego aparatu 3D, takiego jak Microsoft Direct3D. Rozważmy na przykład wizualizację nadrzędną z pojedynczą wizualizacją podrzędną. Jeśli wizualizacja podrzędna jest obracana do przodu w kierunku z (wokół osi y) o 90 stopni, krawędź krawędzi wizualizacji podrzędnej będzie twarzą w przeglądarce i dlatego spodziewamy się, że wizualizacja nie będzie widoczna (ponieważ mapa bitowa nie ma rzeczywistej głębokości). Jeśli wizualizacja nadrzędna jest następnie obracana do tyłu w kierunku ujemnym z (wokół osi y) o 90 stopni, możemy oczekiwać, że wizualizacja podrzędna stanie się w pełni widoczna (ponieważ przekształcenia negują się nawzajem). Jednak w przypadku funkcji DirectComposition tak nie jest. Wizualizacja podrzędna nie będzie widoczna, ponieważ została "spłaszczone do" nadrzędnej mapy bitowej.

 

Przestrzeń współrzędna 3D directComposition

Współrzędna DirectComposition dla efektów transformacji 3D lokalizuje źródło (0,0,0) w lewym górnym rogu powierzchni mapy bitowej, z dodatnimi wartościami osi x przechodzącymi do prawej, dodatniej wartości osi y w dół i dodatnimi wartościami osi z przechodzącymi na zewnątrz od źródła do podglądu. Na tej ilustracji przedstawiono przestrzeń współrzędnych DirectComposition 3D.

3d współrzędnych współrzędnych 3d

Efekt przekształcenia obrotu 3D

Efekt przekształcenia obrotu 3D obraca wizualizację w trzech wymiarach według określonego kąta o wektor osi obrotu [x,y,z] znajdujący się w określonym punkcie centralnym (x,y,z). Kąt jest określony w stopniach. Domyślny wektor osi obrotu to [0,0,-1], a domyślny punkt środkowy to (0,0,0).

Użyj metody IDCompositionDevice::CreateRotateTransform3D, aby utworzyć obiekt przekształcania obrotu 3D. Metoda pobiera interfejs IDCompositionRotateTransform3D, którego można użyć do ustawienia właściwości obiektu.

Efekt przekształcania skalowania 3D

Efekt przekształcenia skalowania 3D sprawia, że wizualizacja jest większa lub mniejsza. Skaluje wizualizację w kierunku [x,y,z] o punkcie środkowym (x,y,z). Domyślny punkt środkowy to (0,0,0).

Użyj metody IDCompositionDevice::CreateScaleTransform3D, aby utworzyć obiekt przekształcania skalowania 3D. Metoda pobiera interfejs IDCompositionScaleTransform3D, którego można użyć do ustawienia właściwości obiektu.

Efekt przekształcania tłumaczenia 3-W

Efekt przekształcenia tłumaczenia 3D zmienia położenie wizualizacji w kierunku [x,y,z].

Użyj metody IDCompositionDevice::CreateTranslateTransform3D, aby utworzyć obiekt przekształcania tłumaczenia 3D. Metoda pobiera interfejs IDCompositionTranslateTransform3D, którego można użyć do ustawienia właściwości obiektu.

Efekt przekształcenia macierzy 3D

Interfejs IDCompositionMatrixTransform3D umożliwia zdefiniowanie własnej macierzy transformacji 4-by-4 i zastosowanie jej do wizualizacji. Ten interfejs jest przydatny, jeśli musisz zastosować typ efektu przekształcenia perspektywy 3D, który nie jest dostępny za pośrednictwem innych interfejsów efektu przekształcenia DirectComposition 3D. Macierz definiuje się, wypełniając strukturę D3DMATRIX i przekazując ją do metody IDCompositionMatrixTransform3D::SetMatrix. Alternatywnie można ustawić każdy element macierzy przy użyciu metody IDCompositionMatrixTransform3D::SetMatrixElement.

Grupa efektu przekształcenia 3D

IDCompositionDevice::CreateTransform3DGroup tworzy kolekcję efektów przekształcania 3D, które można zastosować do wizualizacji jako grupy. Tablica może zawierać dowolną liczbę obiektów przekształcania i może zawierać macierz, obracać, skalować i tłumaczyć przekształcenia. Kolekcja obiektów przekształcania 3D powoduje przekształcenie, którego wartość jest mnożeniem macierzy poszczególnych macierzy w kolekcji.

Kolejność poszczególnych przekształceń w grupie jest ważna. Jeśli na przykład najpierw obrócisz, przeprowadź skalowanie, a następnie przetłumacz, uzyskasz inny wynik niż w przypadku pierwszego tłumaczenia, a następnie obróć, a następnie przeprowadź skalowanie. Funkcja DirectComposition uwzględnia kolejność określania przekształceń 3D w grupie transformacji 3D w taki sam sposób, jak w przypadku przekształceń 2D. Ponadto przekształcenia perspektywy 3D powodują spłaszczenie drzewa wizualnego po zastosowaniu wszystkich przekształceń 3D w bieżącej wizualizacji. Należy to zrobić, aby upewnić się, że scena wygląda jak najbliżej 3D, jak to możliwe.

Obiekty efektów

Aby zastosować efekt do wizualizacji, najpierw należy utworzyć i ustawić właściwości obiektu efektu reprezentującego typ efektu, który ma zostać wygenerowany na wizualizacji. Następnie należy zastosować obiekt efekt do właściwości Effect wizualizacji.

Aby utworzyć obiekt efekt, użyj jednej z następujących IDCompositionDevice metod interfejsu, aby utworzyć obiekt efekt dla żądanego typu efektu. Następujące metody tworzą obiekty efektów:

Każda z powyższych metod pobiera interfejs, którego można użyć do ustawienia właściwości nowo utworzonego obiektu efektu. Użyj metod interfejsu, aby ustawić właściwości zgodnie z potrzebami, aby wygenerować żądany efekt wizualny.

Większość właściwości obiektu efektu może być animowana. Aby animować określoną właściwość, utwórz obiekt animacji i zastosuj go do właściwości, którą chcesz animować; w przeciwnym razie ustaw właściwość na wartość statyczną, która generuje odpowiedni efekt. Aby uzyskać więcej informacji na temat animowania właściwości, zobacz Animacja.

Aby zastosować obiekt efektowy do wizualizacji, wywołaj metodę IDCompositionVisual::SetEffect. Po zastosowaniu efektu do wizualizacji efekt jest stosowany do całego poddrzewa wizualnego zakorzenionego w tej wizualizacji. Na przykład jeśli ustawisz nieprzezroczystość wizualizacji na 50 procent, nieprzezroczystość wszystkich wizualizacji podrzędnych w poddrzewie wizualizacji zostanie zmniejszona o 50%. Możesz zastosować ten sam obiekt efektu do co najmniej jednej wizualizacji. Jeśli zmodyfikujesz właściwości obiektu efektu po zastosowaniu go do wizualizacji, wszystkie wizualizacje zostaną ponownie skomponowane, aby odzwierciedlić zmianę.

Używając obiektu grupy efektów, można jednocześnie zastosować wiele efektów do wizualizacji. Najpierw wywołaj IDCompositionDevice::CreateEffectGroup, aby utworzyć obiekt grupy efektów, a następnie dodaj efekty do grupy przy użyciu interfejsu IDCompositionEffectGroup obiektu.

Pojęcia dotyczące funkcji DirectComposition