Condividi tramite


Trasformazioni (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 il supporto di Microsoft DirectComposition per le trasformazioni affine (2D) bidimensionali (lineari) e descrive i tipi di trasformazioni supportate da DirectComposition.

DirectComposition supporta anche trasformazioni di prospettiva 3D, ma poiché richiedono la creazione di una bitmap intermedia, DirectComposition li considera come effetti anziché trasformazioni. Per informazioni sugli effetti della trasformazione prospettica 3D, vedere Effetti.

Questo argomento include le sezioni seguenti:

Che cos'è una trasformazione DirectComposition 2D?

Una trasformazione 2D consente di modificare la posizione, le dimensioni o la natura di un oggetto visivo in due dimensioni spostando l'oggetto visivo in un'altra posizione (traslazione), rendendolo più grande o più piccolo (ridimensionamento), ruotandolo (rotazione) o distorcendone la forma (asimmetria).

Una trasformazione 2D viene ottenuta eseguendo il mapping dei punti di un oggetto visivo da una posizione a un'altra all'interno dello stesso spazio di coordinate o da uno spazio di coordinate a un altro. Questo mapping è descritto da una tabella di valori denominata matrice di trasformazione, definita come raccolta di tre righe con tre colonne di valori a virgola mobile, come illustrato nella tabella seguente.

M11Default: 1.0
M21Default: 0.0
M31OffsetX: 0.0

M12Default: 0.0
M22Default: 1.0
M32OffsetY: 0.0

0.0
0.0
1.0

La matrice di trasformazione per le trasformazioni 2D affine è una matrice da 3 a 2 che omette la terza colonna dalla matrice di trasformazione precedente. Nella tabella seguente viene illustrato il layout di questa matrice.

M11Default: 1.0
M21Default: 0.0
M31OffsetX: 0.0

M12Default: 0.0
M22Default: 1.0
M32OffsetY: 0.0

Nota

DirectComposition non esegue alcuna elaborazione speciale quando si applicano trasformazioni 2D al contenuto stereo. Ciò significa che il contenuto 3D potrebbe apparire distorto quando viene applicata una trasformazione 2D.

Spazio delle coordinate 2D di DirectComposition

DirectComposition usa uno spazio di coordinate 2D sinistrorso; ovvero, i valori positivi dell'asse x aumentano verso destra e i valori positivi dell'asse y aumentano verso il basso. Gli oggetti visivi vengono posizionati rispetto all'origine, ovvero il punto in cui l'asse x e l'asse y si intersecano (0, 0), come illustrato nella figura seguente.

asse x e asse y di uno spazio di coordinate sinistrorso

Modificando i valori in una matrice di trasformazione da 3 a 2, è possibile ruotare, ridimensionare, asimmetrie e convertire un oggetto in due dimensioni. Ad esempio, se si imposta OffsetX su 100 e OffsetY su 200, spostare l'oggetto a destra di 100 pixel e giù di 200 pixel.

Supporto per le trasformazioni 2D affine

La tabella seguente descrive i tipi di trasformazioni affine 2D supportate da DirectComposition ed elenca le interfacce che è possibile usare per eseguire i vari tipi di trasformazioni.

Trasformazione/interfaccia Descrizione Illustrazione
Ruota 2D IDCompositionRotateTransform ruotare un oggetto visivo in base all'angolo specificato sul punto centrale specificato. illustrazione di un quadrato ruotato di 45 gradi in senso orario circa il centro del quadrato originale
Scala 2D IDCompositionScaleTransform ridimensionare un oggetto visivo in base al fattore specificato sul punto centrale specificato. illustrazione di un quadrato ridimensionato del 130%
Skew 2D IDCompositionSkewTransform asimmetria di un oggetto visivo in base all'angolo specificato lungo l'asse x e l'asse y e intorno al punto centrale specificato. illustrazione di un quadrato asimmetrico di 30 gradi in senso antiorario dall'asse y
Translate 2D IDCompositionTranslateTransform modificare la posizione di un oggetto visivo nella direzione dell'asse x e dell'asse y. illustrazione di un quadrato spostato 20 unità lungo l'asse x positivo e 10 unità lungo l'asse y positivo

Trasformazioni 2D della matrice

L'interfaccia IDCompositionMatrixTransform consente di definire una matrice di trasformazione 2D 3-by-2 personalizzata e applicarla a un oggetto visivo. Questa interfaccia è utile se è necessario applicare un tipo di trasformazione affine 2D non disponibile tramite le altre interfacce di trasformazione DirectComposition. Per definire la matrice, compilare una struttura D2D_MATRIX_3X2_F e passarla al metodo IDCompositionMatrixTransform::SetMatrix.

Trasformare i gruppi

È possibile usare i gruppi di trasformazione per combinare più trasformazioni in una sola. Un gruppo di trasformazione definisce una raccolta di oggetti transform le cui matrici vengono moltiplicate insieme nell'ordine in cui vengono specificate nell'insieme. La matrice di trasformazione risultante viene quindi applicata all'oggetto visivo. Un gruppo di trasformazione produce lo stesso risultato dell'applicazione di ogni trasformazione separatamente.

Tenere presente che l'ordine degli oggetti di trasformazione in un gruppo di trasformazione è importante. Ad esempio, se un oggetto visivo viene prima ruotato, quindi ridimensionato e quindi convertito, il risultato è diverso da se l'oggetto visivo viene prima convertito, quindi ruotato e quindi ridimensionato. DirectComposition applica sempre le trasformazioni a un oggetto visivo nell'ordine in cui vengono specificate nella raccolta.

Per creare un gruppo di trasformazione, creare prima di tutto gli oggetti di trasformazione da includere nel gruppo e quindi passare una matrice di puntatori a oggetti di trasformazione al metodo IDCompositionDevice::CreateTransformGroup. Dopo aver creato un gruppo di trasformazione, non è possibile aggiungere o rimuovere oggetti di trasformazione. Tuttavia, è possibile modificare le proprietà dei singoli oggetti di trasformazione nell'insieme e le modifiche verranno riflesse nella matrice di trasformazione risultante.

Animazione transform

Le proprietà di una trasformazione possono essere animate. Quando una proprietà viene animata, DirectComposition modifica il valore della proprietà nel tempo, anziché contemporaneamente. Ciò è particolarmente utile quando si creano transizioni. Per altre informazioni, vedere Animazione.