Bagikan melalui


Transformasi (DirectComposition)

Catatan

Untuk aplikasi di Windows 10, sebaiknya gunakan WINDOWS.UI.Composition API alih-alih DirectComposition. Untuk informasi selengkapnya, lihat Memodernisasi aplikasi desktop Anda menggunakan lapisan Visual.

Topik ini membahas dukungan Microsoft DirectComposition untuk transformasi affine dua dimensi (2D) (linier), dan menjelaskan jenis transformasi yang didukung DirectComposition.

DirectComposition juga mendukung transformasi perspektif 3D, tetapi karena memerlukan pembuatan bitmap perantara, DirectComposition menganggapnya sebagai efek daripada transformasi. Untuk informasi tentang efek transformasi perspektif 3D, lihat Efek.

Topik ini mencakup bagian berikut:

Apa itu transformasi DirectComposition 2D?

Transformasi 2D memungkinkan Anda mengubah posisi, ukuran, atau sifat visual dalam dua dimensi dengan memindahkan visual ke lokasi lain (terjemahan), membuatnya lebih besar atau lebih kecil (penskalaan), mengubahnya (rotasi), atau mendistorsi bentuknya (condong).

Transformasi 2D dicapai dengan memetakan titik visual dari satu posisi ke posisi lainnya dalam ruang koordinat yang sama, atau dari satu ruang koordinat ke ruang koordinat lainnya. Pemetaan ini dijelaskan oleh tabel nilai yang disebut matriks transformasi, yang didefinisikan sebagai kumpulan tiga baris dengan tiga kolom nilai floating-point seperti yang diperlihatkan dalam tabel berikut ini.

M11Default: 1.0
M21Default: 0.0
M31OffsetX: 0.0

M12Default: 0.0
M22Default: 1.0
M32Offsety: 0.0

0.0
0.0
1,0

Matriks transformasi untuk transformasi 2D affine adalah matriks 3 demi 2 yang menghilangkan kolom ketiga dari matriks transformasi sebelumnya. Tabel berikut ini memperlihatkan tata letak matriks ini.

M11Default: 1.0
M21Default: 0.0
M31OffsetX: 0.0

M12Default: 0.0
M22Default: 1.0
M32Offsety: 0.0

Catatan

DirectComposition tidak melakukan pemrosesan khusus saat menerapkan transformasi 2D ke konten stereo. Ini berarti konten 3D mungkin muncul terdistorsi saat transformasi 2D diterapkan padanya.

 

Ruang koordinat DirectComposition 2D

DirectComposition menggunakan ruang koordinat 2D sebelah kiri; artinya, nilai sumbu x positif meningkat ke nilai sumbu y kanan dan positif meningkat ke bawah. Visual diposisikan relatif terhadap asal, yang merupakan titik di mana sumbu x dan sumbu y bersinggungan (0, 0), seperti yang ditunjukkan dalam ilustrasi berikut.

sumbu x dan sumbu y dari ruang koordinat sebelah kiri

Dengan memanipulasi nilai dalam matriks transformasi 3 demi 2, Anda dapat memutar, menskalakan, condong, dan menerjemahkan objek dalam dua dimensi. Misalnya, jika Anda mengatur OffsetX ke 100 dan OffsetY ke 200, Anda memindahkan objek ke kanan 100 piksel dan menurunkan 200 piksel.

Dukungan untuk transformasi 2D affine

Tabel berikut ini menjelaskan jenis transformasi 2D affine yang didukung oleh DirectComposition, dan mencantumkan antarmuka yang dapat Anda gunakan untuk melakukan berbagai jenis transformasi.

Transformasi/antarmuka Deskripsi Ilustrasi
Putaridcompositionrotatetransform 2D[newline] putar visual dengan sudut yang ditentukan tentang titik tengah yang ditentukan. ilustrasi persegi diputar 45 derajat searah jajar tentang tengah persegi asli
Skala 2Didcompositionscaletransform[newline] menskalakan visual dengan faktor yang ditentukan tentang titik pusat yang ditentukan. ilustrasi persegi berskala 130 persen
Skew 2Didcompositionskewtransform[newline] condongkan visual dengan sudut yang ditentukan di sepanjang sumbu x dan sumbu y, dan di sekitar titik tengah yang ditentukan. ilustrasi persegi miring 30 derajat berlawanan arah jarang dari sumbu y
Terjemahkanidcompositiontranslatetransform 2D[newline] mengubah posisi visual ke arah sumbu x dan sumbu y. ilustrasi persegi memindahkan 20 unit di sepanjang sumbu x positif dan 10 unit di sepanjang sumbu y positif

 

Transformasi Matriks 2D

Antarmuka IDCompositionMatrixTransform memungkinkan Anda menentukan matriks transformasi 2D 3-by-2 affine Anda sendiri dan menerapkannya ke visual. Antarmuka ini berguna jika Anda perlu menerapkan jenis transformasi 2D affine yang tidak tersedia melalui antarmuka transformasi DirectComposition lainnya. Anda menentukan matriks dengan mengisi struktur D2D_MATRIX_3X2_F dan meneruskannya ke metode IDCompositionMatrixTransform::SetMatrix .

Mengubah Grup

Anda dapat menggunakan grup transformasi untuk menggabungkan beberapa transformasi menjadi satu. Grup transformasi mendefinisikan kumpulan objek transformasi yang matriksnya dikalikan bersama dalam urutan yang ditentukan dalam koleksi. Matriks transformasi yang dihasilkan kemudian diterapkan ke visual. Grup transformasi menghasilkan hasil yang sama seperti menerapkan setiap transformasi secara terpisah.

Perlu diingat bahwa urutan objek transformasi dalam grup transformasi penting. Misalnya, jika visual pertama kali diputar, kemudian diskalakan, lalu diterjemahkan, hasilnya berbeda dari jika visual pertama kali diterjemahkan, lalu diputar, lalu diskalakan. DirectComposition selalu menerapkan transformasi ke visual dalam urutan yang ditentukan dalam koleksi.

Untuk membuat grup transformasi, pertama-tama buat objek transformasi yang ingin Anda sertakan dalam grup, lalu teruskan array penunjuk objek transformasi ke metode IDCompositionDevice::CreateTransformGroup . Setelah membuat grup transformasi, Anda tidak dapat menambahkan atau menghapus objek transformasi apa pun. Namun, Anda dapat memodifikasi properti objek transformasi individual dalam koleksi, dan perubahan akan tercermin dalam matriks transformasi yang dihasilkan.

Mengubah animasi

Properti transformasi dapat dianimasikan. Saat properti dianimasikan, DirectComposition mengubah nilai properti dari waktu ke waktu, bukan sekaligus. Ini sangat berguna saat membuat transisi. Untuk informasi selengkapnya, lihat Animasi.

Konsep DirectComposition