Effekte (DirectComposition)
Hinweis
Für Apps auf Windows 10 wird die Verwendung von Windows.UI.Composition-APIs anstelle von DirectComposition empfohlen. Weitere Informationen finden Sie unter Modernisieren Ihrer Desktop-App mithilfe der visuellen Ebene.
In diesem Thema werden die Grundlagen der Microsoft DirectComposition-Effekte und die Arten von Effekten beschrieben, die Von DirectComposition unterstützt werden.
Dieses Thema enthält folgende Abschnitte:
- Was ist ein DirectComposition-Effekt?
- Deckkraft
- Transformationseffekte in 3D-Perspektive
- Effect-Objekte
- Zugehörige Themen
Ein DirectComposition-Effekt ist ein Bitmapvorgang, der während der Rasterung eines Visuals angewendet wird, um die Darstellung des Visuals in irgendeiner 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 Transformationseffekt für eine 3D-Perspektive zu erstellen, erstellt DirectComposition ein Bild einer visuellen Unterstruktur und strukturiert 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 Visuals fest. |
3D-Perspektiventransformation | Wendet einen dreidimensionalen Perspektivtransformationseffekt (3D) auf ein Visual an. |
Hinweis
DirectComposition führt keine spezielle Verarbeitung durch, wenn Effekte auf 3D-Stereoinhalte angewendet werden. Dies bedeutet, dass der 3D-Inhalt verzerrt erscheinen kann, wenn ein Effekt darauf angewendet wird.
Mit dem Deckkrafteffekt können Sie den Deckkraftfaktor festlegen, der beim Rendern des Visuals auf ein gesamtes Visual angewendet wird. Es unterscheidet sich von einer Alphamaske darin, dass derselbe Deckkraftfaktor auf alle Pixel im Visuellen angewendet wird. Deckkraft wird als Wert von 0 (vollständig transparent) bis 1 (vollständig undurchsichtig) angegeben.
Der Deckkraftfaktor wird von übergeordneten auf untergeordnete Visuals angewendet, aber die sichtbaren Auswirkungen der Einstellungen für die geschachtelte Deckkraft werden im Eigenschaftswert einzelner untergeordneter Visuals nicht angegeben. Wenn bei instance ein visuelles Stammvisual eine Deckkraft von 50 % (0,5) und eines seiner untergeordneten Elemente eine Deckkraft von 20 % (0,2) aufweist, wird die Nettodurchlässigkeit für dieses untergeordnete Element als 10 % (0,1) gerendert, aber der Wert der Opacity-Eigenschaft des untergeordneten Elements wäre immer noch 0,2.
In diesem Abschnitt wird der Koordinatenbereich beschrieben, den DirectComposition zum Ausführen von 3D-Perspektiventransformationseffekten verwendet. Außerdem werden die Typen von 3D-Perspektiventransformationseffekten beschrieben, die DirectComposition unterstützt.
- Der DirectComposition-3D-Koordinatenbereich
- 3D-Rotationstransformationseffekt
- Transformationseffekt für die 3D-Skalierung
- Transformationseffekt für die 3D-Übersetzung
- 3D-Matrixtransformationseffekt
- 3D-Transformationseffektgruppe
Hinweis
In DirectComposition funktioniert das Anwenden von 3D-Effekten auf mehrere Ebenen in der visuellen Struktur nicht auf die gleiche Weise wie bei einer vollständigen 3D-Engine wie Microsoft Direct3D. Betrachten Sie beispielsweise ein übergeordnetes Visual, das über ein einzelnes untergeordnetes Visual verfügt. Wenn das untergeordnete Visual in z-Richtung (um die y-Achse) um 90 Grad nach vorne gedreht wird, würde der Rand des untergeordneten visuellen Rands dem Viewer gegenüberstehen, sodass wir erwarten, dass das Visual nicht sichtbar ist (da eine Bitmap keine wirkliche Tiefe aufweist). Wenn das übergeordnete Visual dann in der negativen z-Richtung (um die y-Achse) um 90 Grad rückwärts gedreht wird, können wir erwarten, dass das untergeordnete Visual vollständig sichtbar wird (da sich die Transformationen gegenseitig negieren). In DirectComposition ist dies jedoch nicht der Fall. Das untergeordnete Visual ist nicht sichtbar, da es in die übergeordnete Bitmap "vereinfacht" wurde.
Der DirectComposition-Koordinatenbereich für 3D-Transformationseffekte lokalisiert den Ursprung (0,0,0) in der oberen linken Ecke der Bitmapoberfläche, wobei positive x-Achsenwerte nach rechts, positive Werte der y-Achse nach unten und positive Z-Achsenwerte nach außen vom Ursprung zum Betrachter verlaufen. Diese Abbildung zeigt den DirectComposition-3D-Koordinatenbereich.
Ein 3D-Drehungstransformationseffekt dreht ein Visual 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 Standarddrehachsenvektor ist [0,0,-1], und der Standardmittelpunkt ist (0,0,0).
Verwenden Sie die IDCompositionDevice::CreateRotateTransform3D-Methode , um ein 3D-Rotationstransformationsobjekt zu erstellen. Die -Methode ruft eine IDCompositionRotateTransform3D-Schnittstelle ab, mit der Sie die Eigenschaften des Objekts festlegen können.
Ein 3D-Skalierungstransformationseffekt macht ein Visuelles größer oder kleiner. Es skaliert ein Visual in der [x,y,z]-Richtung um 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, mit der Sie die Eigenschaften des Objekts festlegen können.
Ein Transformationseffekt für die 3D-Übersetzung ändert die Position eines Visuals in [x,y,z]-Richtung.
Verwenden Sie die IDCompositionDevice::CreateTranslateTransform3D-Methode , um ein Transformationsobjekt für die 3D-Übersetzung zu erstellen. Die -Methode ruft eine IDCompositionTranslateTransform3D-Schnittstelle ab, mit der Sie die Eigenschaften des Objekts festlegen können.
Mit der IDCompositionMatrixTransform3D-Schnittstelle können Sie Ihre eigene 4-by-4-Transformationsmatrix definieren und auf ein Visual anwenden. Diese Schnittstelle ist nützlich, wenn Sie einen Typ von 3D-Perspektivtransformationseffekt anwenden müssen, der nicht über die anderen DirectComposition-3D-Transformationseffektschnittstellen verfügbar ist. Sie definieren die Matrix, indem Sie eine D3DMATRIX-Struktur füllen und an die IDCompositionMatrixTransform3D::SetMatrix-Methode übergeben. Alternativ können Sie jedes Element der Matrix mithilfe der IDCompositionMatrixTransform3D::SetMatrixElement-Methode festlegen.
IdCompositionDevice::CreateTransform3DGroup erstellt eine Sammlung von 3D-Transformationseffekten, die Sie als Gruppe auf ein Visual 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 Matrixmultiplikation der einzelnen Transformationsmatrizen in der Auflistung ist.
Die Reihenfolge der einzelnen Transformationen in der Gruppe ist wichtig. Wenn Sie beispielsweise erst drehen, dann skalieren und dann übersetzen, erhalten Sie ein anderes Ergebnis im Vergleich dazu, wenn Sie erst übersetzen, dann drehen und dann skalieren. DirectComposition berücksichtigt die Reihenfolge, in der Sie 3D-Transformationen innerhalb einer Transformations-3D-Gruppe angeben, genauso wie bei 2D-Transformationen. Darüber hinaus führen 3D-Perspektiventransformationen zu einer Vereinfachung der visuellen Struktur, nachdem alle 3D-Transformationen im aktuellen Visual angewendet wurden. Dadurch wird sichergestellt, dass die Szene so nah wie möglich an 3D aussieht.
Um einen Effekt auf ein Visual anzuwenden, müssen Sie zunächst die Eigenschaften eines Effektobjekts erstellen und festlegen, das den Typ des Effekts darstellt, den Sie für das Visual erzeugen möchten. Anschließend müssen Sie das Effektobjekt auf die Effect-Eigenschaft des Visuals 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.
Um ein Effektobjekt auf visual anzuwenden, rufen Sie die IDCompositionVisual::SetEffect-Methode auf. Wenn Sie einen Effekt auf ein Visual anwenden, wird der Effekt auf die gesamte visuelle Unterstruktur angewendet, die in diesem Visual verwurzelt ist. Wenn Sie also beispielsweise die Deckkraft eines Visuals auf 50 Prozent festlegen, wird die Deckkraft aller untergeordneten Visuals in der visuellen Unterstruktur um 50 Prozent reduziert. Sie können dasselbe Effektobjekt auf ein oder mehrere Visuals anwenden. Wenn Sie die Eigenschaften eines Effektobjekts ändern, nachdem Sie es auf Visuals angewendet haben, werden alle Visuals neu zusammengesetzt, um die Änderung widerzuspiegeln.
Mithilfe eines Effektgruppenobjekts können Sie gleichzeitig mehrere Effekte auf ein Visual anwenden. Rufen Sie zunächst 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.