Bagikan melalui


Lihat Transformasi (Direct3D 9)

Bagian ini memperkenalkan konsep dasar transformasi tampilan dan memberikan detail tentang cara menyiapkan matriks transformasi tampilan dalam aplikasi Direct3D.

Transformasi tampilan menemukan penampil di ruang dunia, mengubah simpul menjadi ruang kamera. Di ruang kamera, kamera, atau penampil, berada di asalnya, melihat arah z positif. Ingat bahwa Direct3D menggunakan sistem koordinat sebelah kiri, jadi z positif ke dalam adegan. Matriks tampilan merelokasi objek di dunia di sekitar posisi kamera - asal ruang kamera - dan orientasi.

Ada banyak cara untuk membuat matriks tampilan. Dalam semua kasus, kamera memiliki beberapa posisi logis dan orientasi di ruang dunia yang digunakan sebagai titik awal untuk membuat matriks tampilan yang akan diterapkan ke model dalam adegan. Matriks tampilan menerjemahkan dan memutar objek untuk menempatkannya di ruang kamera, tempat kamera berada di asalnya. Salah satu cara untuk membuat matriks tampilan adalah dengan menggabungkan matriks terjemahan dengan matriks rotasi untuk setiap sumbu. Dalam pendekatan ini, persamaan matriks umum berikut berlaku.

persamaan transformasi tampilan

Dalam rumus ini, V adalah matriks tampilan yang sedang dibuat, T adalah matriks terjemahan yang memposisikan ulang objek di dunia, dan Rₓ melalui Rz adalah matriks rotasi yang memutar objek di sepanjang sumbu x, y-, dan z. Matriks terjemahan dan rotasi didasarkan pada posisi logis dan orientasi kamera di ruang dunia. Jadi, jika posisi logis kamera di dunia adalah <10.20.100>, tujuan dari matriks terjemahan adalah untuk memindahkan objek -10 unit di sepanjang sumbu x, -20 unit di sepanjang sumbu y, dan -100 unit di sepanjang sumbu z. Matriks rotasi dalam rumus didasarkan pada orientasi kamera, dalam hal berapa banyak sumbu ruang kamera diputar tidak selaras dengan ruang dunia. Misalnya, jika kamera yang disebutkan sebelumnya menunjuk lurus ke bawah, sumbu z-nya adalah 90 derajat (radian pi/2) di luar penyelarasan dengan sumbu z ruang dunia, seperti yang ditunjukkan dalam ilustrasi berikut.

ilustrasi ruang pandang kamera dibandingkan dengan ruang dunia

Matriks rotasi menerapkan rotasi yang sama, tetapi berlawanan, besarnya dengan model di adegan. Matriks tampilan untuk kamera ini mencakup rotasi -90 derajat di sekitar sumbu x. Matriks rotasi dikombinasikan dengan matriks terjemahan untuk membuat matriks tampilan yang menyesuaikan posisi dan orientasi objek dalam adegan sehingga bagian atasnya menghadap kamera, memberikan tampilan bahwa kamera berada di atas model.

Menyiapkan Matriks Tampilan

Fungsi pembantu D3DXMatrixLookAtLH dan D3DXMatrixLookAtRH membuat matriks tampilan berdasarkan lokasi kamera dan titik pandang.

Contoh berikut membuat matriks tampilan untuk koordinat sebelah kiri.

D3DXMATRIX out;
D3DXVECTOR3 eye(2,3,3);
D3DXVECTOR3 at(0,0,0);
D3DXVECTOR3 up(0,1,0);
D3DXMatrixLookAtLH(&out, &eye, &at, &up);

Direct3D menggunakan dunia dan melihat matriks untuk mengonfigurasi beberapa struktur data internal. Setiap kali Anda mengatur dunia baru atau matriks tampilan, sistem menghitung ulang struktur internal terkait. Sering mengatur matriks ini secara komputasi memakan waktu. Anda dapat meminimalkan jumlah perhitungan yang diperlukan dengan menggabungkan dunia Anda dan melihat matriks ke dalam matriks tampilan dunia yang Anda tetapkan sebagai matriks dunia, lalu mengatur matriks tampilan ke identitas. Simpan salinan cache dari dunia individual dan lihat matriks yang dapat Anda ubah, gabungkan, dan atur ulang matriks dunia sesuai kebutuhan. Untuk kejelasan, sampel jarang menggunakan pengoptimalan ini.

Transformasi