Condividi tramite


Effetti (DirectComposition)

Nota

Per le app in Windows 10, ti consigliamo di 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.

Questo argomento contiene 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 eseguendo 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 di 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à di 50% (0,5) e uno dei relativi elementi figlio ha un'opacità di 20% (0,2), l'opacità netta per tale figlio viene sottoposta a rendering come 10% (0,1), ma il valore della proprietà Opacity dell'elemento figlio sarà comunque 0,2.

Effetti di trasformazione prospettica 3D

Questa sezione descrive lo spazio delle coordinate usato da DirectComposition per l'esecuzione di 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 nello 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 (attorno all'asse y) di 90 gradi, il bordo del bordo visivo figlio si troverebbe davanti al visualizzatore e quindi ci si aspetterebbe che l'oggetto visivo non sia visibile (perché una bitmap non ha profondità reale). Se l'oggetto visivo padre viene ruotato 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 all'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 delle 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 procedono verso destra, valori positivi dell'asse y verso il basso e valori positivi dell'asse Z che procedono verso l'esterno dell'origine, verso il visualizzatore. Questa figura mostra lo spazio delle coordinate 3D di DirectComposition.

dello spazio delle coordinate 3d

Effetto trasformazione rotazione 3D

Un effetto di trasformazione 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 è 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 trasformazione rotazione 3D. Il metodo recupera un'interfaccia IDCompositionRotateTransform3D che è possibile usare 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 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 trasformazione di conversione 3D. Il metodo recupera un'interfaccia IDCompositionTranslateTransform3D che è possibile usare per impostare le proprietà dell'oggetto.

Effetto trasformazione matrice 3D

L'interfaccia IDCompositionMapositionMatrixTransform3D consente di definire una matrice di trasformazione 4 by-4 personalizzata 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 di DirectComposition. La matrice viene definita riempiendo una struttura D3DMATRIX e passandola al metodo IDCompositionMatrixTransform3D::SetMatrix. In alternativa, è possibile impostare ogni elemento della matrice usando il metodo IDCompositionMatrixTransform3D::SetMatrixElement.

Gruppo di effetti di trasformazione 3D

Il 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 nell'insieme.

L'ordine delle singole trasformazioni nel gruppo è importante. Ad esempio, se si ruota prima, quindi si ridimensiona, quindi si traduce, si ottiene un risultato diverso rispetto a se si converte prima, quindi ruotare, quindi scalare. 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 più vicina possibile a 3D.

Oggetti Effetto

Per applicare un effetto a un oggetto visivo, è prima necessario creare e impostare le proprietà di un oggetto effetto che rappresenta il tipo di effetto che si desidera produrre nell'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 IDCompositionDeviceseguenti 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 particolare proprietà, creare un oggetto animazione e applicarlo alla proprietà che si desidera animare; in caso contrario, impostare la proprietà su un valore statico che produce l'effetto desiderato. Per altre informazioni sull'animazione delle proprietà, vedere Animation.

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 simultaneamente 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 di DirectComposition