Freigeben über


Effekte (DirectComposition)

Anmerkung

Für Apps unter Windows 10 empfehlen wir die Verwendung von Windows.UI.Composition-APIs anstelle von DirectComposition. Weitere Informationen finden Sie unter Modernisieren Ihrer Desktop-App mithilfe der visuellen Ebene.

In diesem Thema werden die Grundlagen von Microsoft DirectComposition-Effekten erläutert und die Typen von Effekten beschrieben, die DirectComposition unterstützt.

Dieses Thema enthält die folgenden Abschnitte:

Was ist ein DirectComposition-Effekt?

Ein DirectComposition-Effekt ist ein Bitmapvorgang, der während der Rasterung eines visuellen Elements angewendet wird, um die Darstellung des visuellen Elements auf irgendeine Weise zu ändern.

DirectComposition erstellt einen Effekt, indem eine visuelle Unterstruktur verwendet und in einer einzelnen Bitmap gerendert wird, bevor der Effekt angewendet wird. Um beispielsweise einen 3D-Perspektivierungseffekt zu erstellen, erzeugt DirectComposition ein Bild einer visuellen Unterstruktur und texturiert das Bild dann auf einer 3D-Ebene, die gemäß der resultierenden Matrix des 3D-Transformationseffekts transformiert wird.

DirectComposition unterstützt die folgenden Arten von Effekten.

Effekttyp Beschreibung
Deckkraft- Legt die Deckkraft eines gesamten visuellen Elements fest.
3D-Perspektivische Transformation Wendet einen dreidimensionalen (3D)-Perspektivischtransformationseffekt auf ein visuelles Element an.

 

Anmerkung

DirectComposition verarbeitet keine spezielle Verarbeitung, wenn Effekte auf 3D-Stereoinhalte angewendet werden. Dies bedeutet, dass der 3D-Inhalt möglicherweise verzerrt angezeigt wird, wenn ein Effekt darauf angewendet wird.

 

Undurchsichtigkeit

Mit dem Deckkrafteffekt können Sie den Deckkraftfaktor festlegen, der auf ein gesamtes visuelles Element angewendet wird, wenn das visuelle Element gerendert wird. Es unterscheidet sich von einer Alphamaske, in der derselbe Deckkraftfaktor auf alle Pixel im visuellen Element angewendet wird. Deckkraft wird als Wert angegeben, der zwischen 0 (vollständig transparent) und 1 (vollständig undurchsichtig) liegt.

Der Deckkraftfaktor wird vom übergeordneten Element auf untergeordnete visuelle Elemente angewendet, aber die sichtbaren Effekte der geschachtelten Deckkrafteinstellungen werden nicht im Eigenschaftswert einzelner untergeordneter visueller Elemente angegeben. Wenn ein Visuelles Stammelement beispielsweise eine Deckkraft von 50% (0,5) aufweist und eines seiner untergeordneten Elemente eine Deckkraft von 20% (0,2) aufweist, wird die Netzdurchsichtigkeit für dieses untergeordnete Element als 10% (0,1) gerendert, der Wert der Opacity-Eigenschaft des untergeordneten Elements wäre jedoch weiterhin 0,2.

3D-Perspektivische Transformationseffekte

In diesem Abschnitt wird der Koordinatenbereich beschrieben, den DirectComposition zum Ausführen von 3D-Perspektivierungseffekten verwendet. Außerdem werden die Typen von 3D-Perspektivierungstransformationseffekten beschrieben, die DirectComposition unterstützt.

Anmerkung

In DirectComposition funktioniert das Anwenden von 3D-Effekten auf mehrere Ebenen in der visuellen Struktur nicht auf die gleiche Weise wie bei einem vollständigen 3D-Modul wie Microsoft Direct3D. Betrachten Sie beispielsweise ein übergeordnetes Visuelles, das ein einzelnes untergeordnetes visuelles Element aufweist. Wenn das untergeordnete visuelle Element in z-Richtung (um die Y-Achse) um 90 Grad nach vorne gedreht wird, würde sich der Rand des untergeordneten visuellen Rands dem Betrachter stellen, und daher erwarten wir, dass das Visuelle nicht sichtbar ist (da eine Bitmap keine echte Tiefe hat). Wenn das übergeordnete visuelle Element dann in der negativen Z-Richtung (um die Y-Achse) um 90 Grad rückwärts gedreht wird, erwarten wir möglicherweise, dass das untergeordnete Visuelle vollständig sichtbar wird (da sich die Transformationen gegenseitig nicht unterscheiden). In DirectComposition ist dies jedoch nicht der Fall. Das untergeordnete visuelle Element wird nicht angezeigt, da es in die übergeordnete Bitmap "abgeflacht" wurde.

 

Der DirectComposition 3D-Koordinatenbereich

Der DirectComposition-Koordinatenbereich für 3D-Transformationseffekte sucht den Ursprung (0,0,0) in der oberen linken Ecke der Bitmapoberfläche, wobei positive x-Achsenwerte nach rechts, positive y-Achsenwerte nach unten und positive z-Achsenwerte nach außen vom Ursprung in Richtung Des Betrachters verlaufen. Diese Abbildung zeigt den DirectComposition 3D-Koordinatenbereich.

directcompostion 3d-Koordinatenraum

3D-Drehungstransformationseffekt

Ein 3D-Drehungstransformationseffekt dreht ein visuelles Element in drei Dimensionen um den angegebenen Winkel um einen Drehachsenvektor [x,y,z], der sich am angegebenen Mittelpunkt (x,y,z) befindet. Der Winkel wird in Grad angegeben. Der Standardachsenvektor ist [0,0,-1], und der Standardmittelpunkt ist (0,0,0).

Verwenden Sie die IDCompositionDevice::CreateRotateTransform3D--Methode, um ein 3D-Drehungstransformationsobjekt zu erstellen. Die Methode ruft eine IDCompositionRotateTransform3D- Schnittstelle ab, die Sie zum Festlegen der Eigenschaften des Objekts verwenden können.

3D-Skalierungstransformationseffekt

Ein 3D-Skalierungstransformationseffekt macht ein visuelles Element größer oder kleiner. Es skaliert ein visuelles Element in der Richtung [x,y,z] über den Mittelpunkt (x,y,z). Der Standardmittelpunkt ist (0,0,0).

Verwenden Sie die IDCompositionDevice::CreateScaleTransform3D--Methode, um ein 3D-Skalierungstransformationsobjekt zu erstellen. Die Methode ruft eine IDCompositionScaleTransform3D- Schnittstelle ab, die Sie zum Festlegen der Eigenschaften des Objekts verwenden können.

3D-Übersetzungstransformationseffekt

Ein 3D-Übersetzungstransformationseffekt ändert die Position eines visuellen Elements in der Richtung [x,y,z]..

Verwenden Sie die IDCompositionDevice::CreateTranslateTransform3D--Methode, um ein 3D-Übersetzungstransformationsobjekt zu erstellen. Die Methode ruft eine IDCompositionTranslateTransform3D- Schnittstelle ab, die Sie zum Festlegen der Eigenschaften des Objekts verwenden können.

3D-Matrixtransformationseffekt

Mit der IDCompositionMatrixTransform3D--Schnittstelle können Sie Ihre eigene 4-by-4-Transformationsmatrix definieren und auf eine visuelle Matrix anwenden. Diese Schnittstelle ist nützlich, wenn Sie einen Typ von 3D-Perspektivierungstransformationseffekt anwenden müssen, der nicht über die anderen DirectComposition 3D-Transformationseffektschnittstellen verfügbar ist. Sie definieren die Matrix, indem Sie eine D3DMATRIX Struktur ausfüllen und an die IDCompositionMatrixTransform3D::SetMatrix-Methode übergeben. Alternativ können Sie jedes Element der Matrix mithilfe der IDCompositionMatrixTransform3D::SetMatrixElement-Methode festlegen.

3D-Transformationseffektgruppe

Die IDCompositionDevice::CreateTransform3DGroup erstellt eine Sammlung von 3D-Transformationseffekten, die Sie als Gruppe auf ein visuelles Element anwenden können. Das Array kann eine beliebige Anzahl von Transformationsobjekten enthalten und kann Matrix-, Dreh-, Skalierungs- und Übersetzungstransformationen enthalten. Die Auflistung von 3D-Transformationsobjekten führt zu einer Transformation, deren Wert die Matrixmultiplizierung der einzelnen Transformationsmatrizen in der Auflistung ist.

Die Reihenfolge einzelner Transformationen in der Gruppe ist wichtig. Wenn Sie z. B. zuerst drehen, dann skalieren und dann übersetzen, erhalten Sie ein anderes Ergebnis als wenn Sie zuerst übersetzen, dann drehen und dann skalieren. DirectComposition berücksichtigt die Reihenfolge, in der Sie 3D-Transformationen innerhalb einer Transformations-3D-Gruppe angeben, auf die gleiche Weise wie bei 2D-Transformationen. Darüber hinaus führen 3D-Perspektivtransformationen zu einer Flachung der visuellen Struktur, nachdem alle 3D-Transformationen im aktuellen visuellen Element angewendet wurden. Dies geschieht, um sicherzustellen, dass die Szene so nah wie möglich mit 3D aussieht.

Effect-Objekte

Um einen Effekt auf ein visuelles Element anzuwenden, müssen Sie zuerst die Eigenschaften eines Effektobjekts erstellen und festlegen, das den Typ des Effekts darstellt, den Sie für das visuelle Element erzeugen möchten. Anschließend müssen Sie das Effektobjekt auf die Effect-Eigenschaft des visuellen Elements anwenden.

Verwenden Sie zum Erstellen eines Effektobjekts eine der folgenden IDCompositionDevice Schnittstellenmethoden, um ein Effektobjekt für den gewünschten Effekttyp zu erstellen. Die folgenden Methoden erstellen Effektobjekte:

Jede der vorherigen Methoden ruft eine Schnittstelle ab, mit der Sie die Eigenschaften des neu erstellten Effektobjekts festlegen können. Verwenden Sie die Schnittstellenmethoden, um die Eigenschaften nach Bedarf festzulegen, um den gewünschten visuellen Effekt zu erzeugen.

Die meisten Eigenschaften eines Effektobjekts können animiert werden. Um eine bestimmte Eigenschaft zu animieren, erstellen Sie ein Animationsobjekt, und wenden Sie es auf die Eigenschaft an, die Sie animieren möchten. legen Sie andernfalls die Eigenschaft auf einen statischen Wert fest, der den gewünschten Effekt erzeugt. Weitere Informationen zum Animieren von Eigenschaften finden Sie unter Animation.

Rufen Sie zum Anwenden eines Effektobjekts auf visuelle Elemente die IDCompositionVisual::SetEffect-Methode auf. Wenn Sie einen Effekt auf ein visuelles Element anwenden, wird der Effekt auf die gesamte visuelle Unterstruktur angewendet, die an diesem visuellen Element verwurzelt ist. Wenn Sie beispielsweise die Deckkraft eines visuellen Elements auf 50 Prozent festlegen, wird die Deckkraft aller untergeordneten Visuellen in der visuellen Unterstruktur um 50 Prozent reduziert. Sie können dasselbe Effektobjekt auf ein oder mehrere visuelle Objekte anwenden. Wenn Sie die Eigenschaften eines Effektobjekts ändern, nachdem es auf visuelle Elemente angewendet wurde, werden alle visuellen Elemente neu zusammengesetzt, um die Änderung widerzuspiegeln.

Mithilfe eines Effektgruppenobjekts können Sie gleichzeitig mehrere Effekte auf ein visuelles Objekt anwenden. Rufen Sie zuerst IDCompositionDevice::CreateEffectGroup auf, um das Effektgruppenobjekt zu erstellen, und fügen Sie dann der Gruppe Effekte hinzu, indem Sie die IDCompositionEffectGroup--Schnittstelle des Objekts verwenden.

DirectComposition-Konzepte