Effetti (DirectComposition)

Nota

Per le app in Windows 10, è consigliabile usare le API Windows.UI.Composition anziché DirectComposition. Per altre info, vedi Modernizzare l'app desktop usando il livello visivo.

Questo argomento illustra le nozioni di base degli effetti di Microsoft DirectComposition e descrive i tipi di effetti supportati da DirectComposition.

In questo argomento sono incluse le sezioni seguenti:

Che cos'è un effetto DirectComposition?

Un effetto DirectComposition è un'operazione bitmap applicata durante la rasterizzazione di un oggetto visivo per modificare in qualche modo l'aspetto dell'oggetto visivo.

DirectComposition crea un effetto prendendo un sottoalbero visivo e eseguendone il rendering in una singola bitmap prima di applicare l'effetto. Ad esempio, per creare un effetto di trasformazione prospettica 3D, DirectComposition produce un'immagine di un sottoalbero visivo e quindi esegue la trama dell'immagine in un piano 3D trasformato in base alla matrice risultante dell'effetto di trasformazione 3D.

DirectComposition supporta i tipi di effetti seguenti.

Tipo di effetto Descrizione
Opacità Imposta l'opacità di un intero oggetto visivo.
Trasformazione prospettica 3D Applica un effetto di trasformazione prospettica tridimensionale (3D) a un oggetto visivo.

 

Nota

DirectComposition non esegue alcuna elaborazione speciale quando si applicano effetti al contenuto stereo 3D. Ciò significa che il contenuto 3D potrebbe apparire distorto quando viene applicato un effetto.

 

Opacità

L'effetto opacità consente di impostare il fattore di opacità applicato a un intero oggetto visivo quando viene eseguito il rendering dell'oggetto visivo. Differisce da una maschera alfa in quanto lo stesso fattore di opacità viene applicato a tutti i pixel nell'oggetto visivo. L'opacità viene specificata come valore compreso tra 0 (completamente trasparente) e 1 (completamente opaco).

Il fattore di opacità viene applicato dagli oggetti visivi padre a figlio, ma gli effetti visibili delle impostazioni di opacità annidata non sono indicati nel valore della proprietà di singoli oggetti visivi figlio. Ad esempio, se un oggetto visivo radice ha un'opacità del 50% (0,5) e uno dei relativi elementi figlio ha un'opacità del 20% (0,2), l'opacità netta per tale elemento figlio viene sottoposta a rendering come 10% (0,1), ma il valore della proprietà Opacity dell'elemento figlio sarà ancora 0,2.

Effetti di trasformazione prospettica 3D

Questa sezione descrive lo spazio delle coordinate usato da DirectComposition per eseguire effetti di trasformazione prospettica 3D. Descrive anche i tipi di effetti di trasformazione prospettica 3D supportati da DirectComposition.

Nota

In DirectComposition l'applicazione di effetti 3D a più livelli nella struttura ad albero visuale non funziona allo stesso modo in cui funziona con un motore 3D completo, ad esempio Microsoft Direct3D. Si consideri ad esempio un oggetto visivo padre con un singolo oggetto visivo figlio. Se l'oggetto visivo figlio viene ruotato in avanti nella direzione z (intorno all'asse y) di 90 gradi, il bordo del bordo dell'oggetto visivo figlio si troverebbe davanti al visualizzatore e quindi ci si aspetterebbe che l'oggetto visivo non sia visibile (perché una bitmap non ha una profondità reale). Se l'oggetto visivo padre viene ruotato all'indietro nella direzione z negativa (intorno all'asse y) di 90 gradi, è possibile che l'oggetto visivo figlio diventi completamente visibile (poiché le trasformazioni negano l'una l'altra). Tuttavia, in DirectComposition questo non è il caso. L'oggetto visivo figlio non sarà visibile perché è stato "appiattito" nella bitmap padre.

 

Spazio delle coordinate 3D di DirectComposition

Lo spazio di coordinate DirectComposition per gli effetti di trasformazione 3D individua l'origine (0,0,0) nell'angolo superiore sinistro della superficie bitmap, con valori positivi dell'asse x che procede verso destra, valori positivi dell'asse y che procedono verso il basso e i valori positivi dell'asse Z che procedono verso l'esterno dall'origine verso il visualizzatore. Questa figura mostra lo spazio delle coordinate 3D di DirectComposition.

spazio delle coordinate 3d directcompostion

Effetto di trasformazione rotazione 3D

Un effetto di trasformazione di rotazione 3D ruota un oggetto visivo in tre dimensioni in base all'angolo specificato su un vettore dell'asse di rotazione [x,y,z] situato nel punto centrale specificato (x,y,z). L'angolo viene specificato in gradi. Il vettore dell'asse di rotazione predefinito è [0,0,-1] e il punto centrale predefinito è (0,0,0).

Usare il metodo IDCompositionDevice::CreateRotateTransform3D per creare un oggetto transform di rotazione 3D. Il metodo recupera un'interfaccia IDCompositionRotateTransform3D che è possibile utilizzare per impostare le proprietà dell'oggetto.

Effetto trasformazione ridimensionamento 3D

Un effetto di trasformazione del ridimensionamento 3D rende un oggetto visivo più grande o più piccolo. Ridimensiona un oggetto visivo nella direzione [x,y,z] sul punto centrale (x,y,z). Il punto centrale predefinito è (0,0,0).

Usare il metodo IDCompositionDevice::CreateScaleTransform3D per creare un oggetto trasformazione di ridimensionamento 3D. Il metodo recupera un'interfaccia IDCompositionScaleTransform3D che è possibile utilizzare per impostare le proprietà dell'oggetto.

Effetto di trasformazione traslazione 3D

Un effetto di trasformazione traslazione 3D modifica la posizione di un oggetto visivo nella direzione [x,y,z].

Usare il metodo IDCompositionDevice::CreateTranslateTransform3D per creare un oggetto transform di conversione 3D. Il metodo recupera un'interfaccia IDCompositionTranslateTransform3D che è possibile utilizzare per impostare le proprietà dell'oggetto.

Effetto trasformazione matrice 3D

L'interfaccia IDCompositionMatrixTransform3D consente di definire la propria matrice di trasformazione 4 by-4 e applicarla a un oggetto visivo. Questa interfaccia è utile se è necessario applicare un tipo di effetto di trasformazione prospettica 3D non disponibile tramite le altre interfacce degli effetti di trasformazione 3D directComposition. Per definire la matrice, compilare una struttura D3DMATRIX e passarla al metodo IDCompositionMatrixTransform3D::SetMatrix . In alternativa, è possibile impostare ogni elemento della matrice usando il metodo IDCompositionMatrixTransform3D::SetMatrixElement .

Gruppo di effetti di trasformazione 3D

IDCompositionDevice::CreateTransform3DGroup crea una raccolta di effetti di trasformazione 3D che è possibile applicare a un oggetto visivo come gruppo. La matrice può includere un numero qualsiasi di oggetti di trasformazione e può includere una matrice, una rotazione, una scala e una conversione delle trasformazioni. La raccolta di oggetti trasformazione 3D comporta una trasformazione il cui valore è la moltiplicazione della matrice delle singole matrici di trasformazione nella raccolta.

L'ordine delle singole trasformazioni nel gruppo è importante. Ad esempio, se si ruota per la prima volta, quindi si ridimensiona, si ottiene un risultato diverso rispetto a se si traduce per la prima volta, quindi ruotare, quindi ridimensionare. DirectComposition rispetta l'ordine in cui si specificano trasformazioni 3D all'interno di un gruppo 3D di trasformazione nello stesso modo in cui viene eseguito per le trasformazioni 2D. Inoltre, le trasformazioni della prospettiva 3D comportano l'appiattimento della struttura ad albero visuale dopo l'applicazione di tutte le trasformazioni 3D nell'oggetto visivo corrente. Questa operazione viene eseguita per garantire che la scena sia il più vicina possibile a 3D.

Oggetti Effetto

Per applicare un effetto a un oggetto visivo, è innanzitutto necessario creare e impostare le proprietà di un oggetto effetto che rappresenta il tipo di effetto che si desidera produrre sull'oggetto visivo. È quindi necessario applicare l'oggetto effetto alla proprietà Effect dell'oggetto visivo.

Per creare un oggetto effetto, usare uno dei metodi di interfaccia IDCompositionDevice seguenti per creare un oggetto effetto per il tipo di effetto desiderato. I metodi seguenti creano oggetti effetto:

Ognuno dei metodi precedenti recupera un'interfaccia che è possibile utilizzare per impostare le proprietà dell'oggetto effetto appena creato. Utilizzare i metodi di interfaccia per impostare le proprietà in base alle esigenze per produrre l'effetto visivo desiderato.

La maggior parte delle proprietà di un oggetto effetto può essere animata. Per animare una determinata proprietà, creare un oggetto animazione e applicarlo alla proprietà che vuoi animare; in caso contrario, impostare la proprietà su un valore statico che produce l'effetto desiderato. Per altre informazioni sull'animazione delle proprietà, vedere Animazione.

Per applicare un oggetto effetto all'oggetto visivo, chiamare il metodo IDCompositionVisual::SetEffect . Quando si applica un effetto a un oggetto visivo, l'effetto viene applicato all'intero sottoalbero visivo rooted in tale oggetto visivo. Ad esempio, se si imposta l'opacità di un oggetto visivo sul 50%, l'opacità di tutti gli oggetti visivi figlio nel sottoalbero visivo verrà ridotta del 50%. È possibile applicare lo stesso oggetto effetto a uno o più oggetti visivi. Se si modificano le proprietà di un oggetto effetto dopo l'applicazione agli oggetti visivi, tutti gli oggetti visivi vengono ricomposti per riflettere la modifica.

Usando un oggetto gruppo di effetti, è possibile applicare contemporaneamente più effetti a un oggetto visivo. Chiamare prima IDCompositionDevice::CreateEffectGroup per creare l'oggetto gruppo di effetti e quindi aggiungere effetti al gruppo usando l'interfaccia IDCompositionEffectGroup dell'oggetto.

Concetti relativi a DirectComposition