Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Viewport adalah persegi panjang dua dimensi (2D) tempat adegan 3D diproyeksikan. Di Direct3D, persegi panjang ada sebagai koordinat dalam permukaan Direct3D yang digunakan sistem sebagai target penyajian. Transformasi proyeksi mengonversi simpul menjadi sistem koordinat yang digunakan untuk viewport. Viewport juga digunakan untuk menentukan rentang nilai kedalaman pada permukaan target render tempat adegan akan dirender (biasanya 0,0 hingga 1,0).
Frustum Tampilan
Frustum tampilan adalah volume 3D dalam adegan yang diposisikan relatif terhadap kamera viewport. Bentuk volume memengaruhi bagaimana model diproyeksikan dari ruang kamera ke layar. Jenis proyeksi yang paling umum, proyeksi perspektif, bertanggung jawab untuk membuat objek di dekat kamera tampak lebih besar daripada objek di kejauhan. Untuk tampilan perspektif, frustum tampilan dapat divisualisasikan sebagai piramida, dengan kamera diposisikan di ujung seperti yang ditunjukkan pada ilustrasi berikut. Piramida ini berpotongan oleh bidang kliping depan dan belakang. Volume dalam piramida antara bidang kliping depan dan belakang adalah frustum tampilan. Objek hanya terlihat ketika berada dalam volume ini.
Jika Anda membayangkan bahwa Anda berdiri di ruangan gelap dan melihat melalui jendela persegi, Anda memvisualisasikan frustum tampilan. Dalam analogi ini, bidang kliping dekat adalah jendela, dan bidang kliping belakang adalah apa pun yang akhirnya mengganggu pandangan Anda - pencakup langit di seberang jalan, pegunungan di kejauhan, atau tidak sama sekali. Anda dapat melihat semua yang ada di dalam piramida terpotong yang dimulai dari jendela dan diakhiri dengan apa pun yang mengganggu pandangan Anda, dan Anda tidak dapat melihat yang lain.
Frustum tampilan didefinisikan oleh fov (bidang tampilan) dan oleh jarak bidang kliping depan dan belakang, yang ditentukan dalam koordinat z, seperti yang ditunjukkan dalam diagram berikut.
Dalam diagram ini, variabel D adalah jarak dari kamera ke asal ruang yang ditentukan di bagian terakhir dari alur geometri - transformasi tampilan. Ini adalah ruang di mana Anda mengatur batas frustum tampilan Anda. Untuk informasi tentang bagaimana variabel D ini digunakan untuk membangun matriks proyeksi, lihat transformasi Proyeksi
Persegi Panjang Viewport
Struktur viewport berisi empat anggota (X, Y, Lebar, Tinggi) yang menentukan area permukaan target render tempat adegan akan dirender. Nilai-nilai ini sesuai dengan persegi panjang tujuan, atau persegi panjang viewport, seperti yang ditunjukkan dalam diagram berikut.
Nilai yang Anda tentukan untuk anggota X, Y, Lebar, Tinggi adalah koordinat layar relatif terhadap sudut kiri atas permukaan target render. Struktur mendefinisikan dua anggota tambahan (MinZ dan MaxZ) yang menunjukkan rentang kedalaman tempat adegan akan dirender.
Direct3D mengasumsikan bahwa volume kliping viewport berkisar dari -1,0 hingga 1,0 di X, dan dari 1,0 hingga -1,0 di Y. Ini adalah pengaturan yang paling sering digunakan oleh aplikasi di masa lalu. Anda dapat menyesuaikan rasio aspek viewport sebelum mengklip menggunakan transformasi proyeksi.
Catatan MinZ dan MaxZ menunjukkan rentang kedalaman tempat adegan akan dirender dan tidak digunakan untuk kliping. Sebagian besar aplikasi akan mengatur nilai-nilai ini ke 0,0 dan 1.0, untuk memungkinkan sistem merender ke seluruh rentang nilai kedalaman di buffer kedalaman. Dalam beberapa kasus, Anda dapat mencapai efek khusus dengan menggunakan rentang kedalaman lainnya. Misalnya, untuk merender tampilan heads-up dalam game, Anda dapat mengatur kedua nilai ke 0,0 untuk memaksa sistem merender objek dalam adegan di latar depan, atau Anda dapat mengatur keduanya ke 1,0 untuk merender objek yang harus selalu ada di latar belakang.
Dimensi yang digunakan dalam anggota X, Y, Lebar, Tinggi dari struktur viewport menentukan lokasi dan dimensi viewport pada permukaan target render. Nilai-nilai ini berada dalam koordinat layar, relatif terhadap sudut kiri atas permukaan.
Direct3D menggunakan lokasi dan dimensi viewport untuk menskalakan simpul agar sesuai dengan adegan yang dirender ke lokasi yang sesuai pada permukaan target. Secara internal, Direct3D menyisipkan nilai-nilai ini ke dalam matriks berikut yang diterapkan ke setiap puncak.
Matriks ini menskalakan simpul sesuai dengan dimensi viewport dan rentang kedalaman yang diinginkan dan menerjemahkannya ke lokasi yang sesuai pada permukaan target render. Matriks juga membalik koordinat y untuk mencerminkan asal layar di sudut kiri atas dengan y meningkat ke bawah. Setelah matriks ini diterapkan, simpul masih homogen - artinya, mereka masih ada sebagai simpul [x,y,z,w]- dan harus dikonversi ke koordinat non-homogen sebelum dikirim ke rasterizer.
Catatan Aplikasi biasanya mengatur MinZ dan MaxZ masing-masing ke 0.0 dan 1.0 untuk menyebabkan sistem merender ke seluruh rentang kedalaman. Namun, Anda dapat menggunakan nilai lain untuk mencapai pengaruh tertentu. Misalnya, Anda dapat mengatur kedua nilai ke 0,0 untuk memaksa semua objek ke latar depan, atau mengatur keduanya ke 1,0 untuk merender semua objek ke latar belakang.
Menghapus Viewport
Menghapus viewport mengatur ulang konten persegi panjang viewport pada permukaan target render. Ini juga dapat membersihkan persegi panjang di permukaan buffer kedalaman dan stensil.
Menyiapkan Viewport untuk Kliping
Hasil matriks proyeksi menentukan volume kliping dalam ruang proyeksi sebagai:
-wc<= xc<= wc
-wc<= yc<= wc
0 <= zc<= wc
Di mana: x, y, z, dan w mewakili koordinat puncak setelah transformasi proyeksi diterapkan. Simpul apa pun yang memiliki komponen x, y-, atau z di luar rentang ini diklip, jika kliping diaktifkan (perilaku default).
Topik terkait