Effekter (DirectComposition)
Not
För appar i Windows 10 rekommenderar vi att du använder API:er för Windows.UI.Composition i stället för DirectComposition. Mer information finns i Modernisera din skrivbordsapp med hjälp av visualiseringsskiktet.
I det här avsnittet beskrivs grunderna i Microsoft DirectComposition-effekter och de typer av effekter som DirectComposition stöder.
Det här avsnittet innehåller följande avsnitt:
- Vad är en DirectComposition-effekt?
- Opacitet
- 3D-perspektivtransformeringseffekter
- Effect-objekt
- Relaterade ämnen
Vad är en DirectComposition-effekt?
En DirectComposition-effekt är en bitmappsåtgärd som tillämpas under rastreringen av ett visuellt objekt för att ändra utseendet på det visuella objektet på något sätt.
DirectComposition skapar en effekt genom att ta ett visuellt underträd och återge det till en enda bitmapp innan effekten tillämpas. För att till exempel skapa en 3D-perspektivtransformeringseffekt skapar DirectComposition en bild av ett visuellt underträd och texturerar sedan bilden till ett 3D-plan som transformeras enligt 3D-transformeringseffektens resulterande matris.
DirectComposition stöder följande typer av effekter.
Effekttyp | Beskrivning |
---|---|
Opacitet | Anger ogenomskinlighet för ett helt visuellt objekt. |
3D-perspektiv transformera | Tillämpar en tredimensionell (3D) perspektivtransformeringseffekt på ett visuellt objekt. |
Not
DirectComposition utför ingen särskild bearbetning vid tillämpning av effekter på 3D-stereoinnehåll. Det innebär att 3D-innehållet kan verka förvrängt när en effekt tillämpas på det.
Ogenomskinlighet
Med opacitetseffekten kan du ange den opacitetsfaktor som tillämpas på ett helt visuellt objekt när det visuella objektet återges. Den skiljer sig från en alfamask eftersom samma opacitetsfaktor tillämpas på alla bildpunkter i det visuella objektet. Opacitet anges som ett värde som sträcker sig från 0 (helt transparent) till 1 (helt ogenomskinlig).
Opacitetsfaktorn tillämpas från överordnade till underordnade visuella objekt, men de synliga effekterna av de kapslade opacitetsinställningarna anges inte i egenskapsvärdet för enskilda underordnade visuella objekt. Om ett rotobjekt till exempel har en opacitet på 50% (0,5) och ett av dess underordnade objekt har en opacitet på 20% (0,2) återges nettoopaciteten för det barnet som 10% (0,1), men värdet för barnets ogenomskinlighetsegenskap är fortfarande 0,2.
Transformeringseffekter för 3D-perspektiv
I det här avsnittet beskrivs koordinatutrymmet som DirectComposition använder för att utföra 3D-perspektivtransformeringseffekter. Den beskriver också de typer av 3D-perspektivtransformeringseffekter som DirectComposition stöder.
- DirectComposition 3D-koordinatutrymmet
- 3D-rotationstransformeringseffekt
- 3D-skalningstransformeringseffekt
- 3D-översättningstransformeringseffekt
- 3D-matristransformeringseffekt
- 3D-transformeringseffektgrupp
Not
I DirectComposition fungerar inte tillämpningen av 3D-effekter på flera nivåer i det visuella trädet på samma sätt som med en fullständig 3D-motor, till exempel Microsoft Direct3D. Tänk dig till exempel ett överordnat visuellt objekt som har ett enda underordnat visuellt objekt. Om det underordnade visuella objektet roteras framåt i z-riktningen (runt y-axeln) med 90 grader, skulle kanten på den underordnade visuella kanten möta visningsprogrammet, så vi förväntar oss att det visuella objektet inte ska vara synligt (eftersom en bitmapp inte har något verkligt djup). Om det överordnade visuella objektet sedan roteras bakåt i negativ z-riktning (runt y-axeln) med 90 grader kan vi förvänta oss att det underordnade visuella objektet blir helt synligt (eftersom transformeringarna negerar varandra). Men i DirectComposition är detta inte fallet. Det underordnade visuella objektet visas inte eftersom det "planades ut till" den överordnade bitmappen.
DirectComposition 3D-koordinatutrymmet
DirectComposition-koordinatutrymmet för 3D-transformeringseffekter lokaliserar ursprunget (0,0,0) i det övre vänstra hörnet av bitmappsytan, med positiva x-axelvärden som fortsätter till höger, positiva y-axelvärden fortsätter nedåt och positiva z-axelvärden fortsätter utåt från ursprunget, mot visningsprogrammet. Den här bilden visar DirectComposition 3D-koordinatutrymmet.
3D-rotationstransformeringseffekt
En 3D-rotationstransformeringseffekt roterar ett visuellt objekt i tre dimensioner med den angivna vinkeln om en rotationsaxelvektor [x,y,z] som finns vid den angivna mittpunkten (x,y,z). Vinkeln anges i grader. Standardvektorn för rotationsaxeln är [0,0,-1] och standardpunkten i mitten är (0,0,0).
Använd metoden IDCompositionDevice::CreateRotateTransform3D för att skapa ett 3D-rotationstransformeringsobjekt. Metoden hämtar ett IDCompositionRotateTransform3D- gränssnitt som du kan använda för att ange objektets egenskaper.
Transformeringseffekt för 3D-skalning
En 3D-skalningstransformeringseffekt gör ett visuellt objekt större eller mindre. Det skalar ett visuellt objekt i riktningen [x,y,z] om mittpunkten (x,y,z). Standardpunkten i mitten är (0,0,0).
Använd metoden IDCompositionDevice::CreateScaleTransform3D för att skapa ett 3D-skalningstransformeringsobjekt. Metoden hämtar ett IDCompositionScaleTransform3D- gränssnitt som du kan använda för att ange objektets egenskaper.
Transformeringseffekt för 3D-översättning
En 3D-översättningstransformeringseffekt ändrar positionen för ett visuellt objekt i riktningen [x,y,z].
Använd metoden IDCompositionDevice::CreateTranslateTransform3D för att skapa ett 3D-översättningstransformeringsobjekt. Metoden hämtar ett IDCompositionTranslateTransform3D- gränssnitt som du kan använda för att ange objektets egenskaper.
Transformeringseffekt för 3D-matris
Med gränssnittet IDCompositionMatrixTransform3D kan du definiera din egen 4-x-4-transformeringsmatris och tillämpa den på ett visuellt objekt. Det här gränssnittet är användbart om du behöver tillämpa en typ av 3D-perspektivtransformeringseffekt som inte är tillgänglig via de andra DirectComposition 3D-transformeringseffektgränssnitten. Du definierar matrisen genom att fylla i en D3DMATRIX struktur och skicka den till metoden IDCompositionMatrixTransform3D::SetMatrix. Du kan också ange varje element i matrisen med hjälp av metoden IDCompositionMatrixTransform3D::SetMatrixElement.
3D-transformeringseffektgrupp
IDCompositionDevice::CreateTransform3DGroup skapar en samling 3D-transformeringseffekter som du kan använda för ett visuellt objekt som en grupp. Matrisen kan innehålla valfritt antal transformeringsobjekt och kan innehålla matriser, rotera, skala och översätta transformeringar. Samlingen med 3D-transformeringsobjekt resulterar i en transformering vars värde är matrisens multiplikation av de enskilda transformeringsmatriserna i samlingen.
Ordningen på enskilda transformeringar i gruppen är viktig. Om du till exempel först roterar, sedan skalar och sedan översätter, får du ett annat resultat än om du först översätter, roterar och sedan skalar. DirectComposition respekterar i vilken ordning du anger 3D-transformeringar i en transformerings-3D-grupp på samma sätt som för 2D-transformeringar. Dessutom resulterar 3D-perspektivtransformering i utplattande av det visuella trädet när alla 3D-transformeringar i det aktuella visuella objektet har tillämpats. Detta görs för att säkerställa att scenen ser så nära 3D som möjligt.
Effektobjekt
Om du vill tillämpa en effekt på ett visuellt objekt måste du först skapa och ange egenskaperna för ett effektobjekt som representerar den typ av effekt som du vill skapa på det visuella objektet. Sedan måste du tillämpa effektobjektet på det visuella objektets effektegenskap.
Om du vill skapa ett effektobjekt använder du någon av följande IDCompositionDevice- gränssnittsmetoder för att skapa ett effektobjekt för den typ av effekt som du vill använda. Följande metoder skapar effektobjekt:
Var och en av de föregående metoderna hämtar ett gränssnitt som du kan använda för att ange egenskaperna för det nyligen skapade effektobjektet. Använd gränssnittsmetoderna för att ange egenskaperna efter behov för att skapa den visuella effekt som du vill ha.
De flesta egenskaper för ett effektobjekt kan animeeras. Om du vill animera en viss egenskap skapar du ett animeringsobjekt och tillämpar det på den egenskap som du vill animera. Annars anger du egenskapen till ett statiskt värde som ger önskad effekt. Mer information om hur du animera egenskaper finns i Animation.
Om du vill tillämpa ett effektobjekt på det visuella objektet anropar du metoden IDCompositionVisual::SetEffect. När du tillämpar en effekt på ett visuellt objekt tillämpas effekten på hela det visuella underträdet som rotas i det visuella objektet. Om du till exempel ställer in opaciteten för ett visuellt objekt till 50 procent minskas opaciteten för alla underordnade visuella objekt i det visuella underträdet med 50 procent. Du kan använda samma effektobjekt på ett eller flera visuella objekt. Om du ändrar egenskaperna för ett effektobjekt när du har tillämpat det på visuella objekt, skapas alla visuella objekt på nytt för att återspegla ändringen.
Genom att använda ett effektgruppsobjekt kan du samtidigt tillämpa flera effekter på ett visuellt objekt. Anropa först IDCompositionDevice::CreateEffectGroup för att skapa effektgruppsobjektet och lägg sedan till effekter i gruppen med hjälp av objektets IDCompositionEffectGroup--gränssnitt.
Relaterade ämnen