Mengenai Koordinasi Transformasi Model 3D

Laman dikemaskini :
Tarikh penciptaan halaman :

Bahan

pertama sekali

Anda mungkin sering melihat imej 3D pada skrin TV dan paparan dalam permainan, tetapi bagaimanakah anda memaparkan objek yang wujud dalam ruang 3D, seperti watak dan bangunan yang bergerak pada skrin, pada skrin 2D?

Dalam permainan 2D, hanya terdapat elemen dua dimensi "X dan Y" sebagai nilai koordinat, dan paparan juga 2D, jadi jika anda melukis objek dengan menentukan kedudukan koordinat X dan Y, anda akan memahami secara intuitif bagaimana ia akan dilukis pada kedudukan mana.

Walau bagaimanapun, dalam 3D, ia tidak begitu mudah. Seperti namanya, 3D ialah "3 dimensi" dan mempunyai tiga maklumat koordinat: "X, Y dan Z". Oleh kerana koordinat berbeza daripada paparan iaitu 2D, tidak mungkin untuk melukis objek seperti itu.

Kemudian, apa yang perlu dilakukan ialah "menukar maklumat tiga dimensi kepada maklumat dua dimensi". Ini biasanya dirujuk sebagai "transformasi koordinat." Perlu diingat bahawa transformasi koordinat ini penting untuk pengaturcaraan 3D.

Terdapat beberapa jenis transformasi koordinat untuk menukar 3D kepada 2D, tetapi terdapat tiga jenis utama transformasi koordinat yang dikendalikan oleh pengaturcara: "transformasi dunia", "transformasi pandangan" dan "transformasi unjuran". Di sini, kami akan menerangkan segala-galanya yang berkaitan dengan transformasi koordinat.

Sistem koordinat tangan kiri dan kanan

Dalam 3D, terdapat dua sistem koordinat, "sistem koordinat tangan kiri" dan "sistem koordinat tangan kanan", yang mempunyai orientasi yang berbeza untuk setiap koordinat seperti yang ditunjukkan dalam rajah di bawah.

Direct3D terutamanya menggunakan sistem koordinat tangan kiri, tetapi terdapat juga fungsi untuk mengira sistem koordinat tangan kanan. Walau bagaimanapun, XNA hanya menyediakan kaedah pengiraan untuk sistem koordinat tangan kanan. Ini nampaknya selaras dengan fakta bahawa aplikasi lain sering menggunakan sistem koordinat tangan kanan.

Semua petua XNA di laman web ini menggunakan sistem koordinat tangan kanan.

Sistem Koordinat Tempatan (Sistem Koordinat Model)

Setiap model mempunyai sistem koordinat yang berpusat pada asal. Apabila mencipta model dengan perisian pemodelan, saya rasa lebih mudah difahami jika anda membayangkan menciptanya dengan asal sebagai pusat.

Sistem Koordinat Dunia

Sistem koordinat dunia membolehkan anda meletakkan model di mana-mana sahaja. Jika anda tidak melakukan apa-apa dalam transformasi dunia ini, model akan diletakkan di asal dengan cara yang sama seperti koordinat tempatan. Penempatan bukan sahaja untuk bergerak dari asal, tetapi juga untuk memutar dan menskalakan.

Lihat Sistem Koordinat

Sebaik sahaja anda telah meletakkan model dalam koordinat dunia, anda memerlukan maklumat tentang tempat anda mencari dan di mana anda melihat ruang 3D. Inilah yang kita panggil "transformasi pandangan". Transformasi pandangan biasanya sering diwakili sebagai kamera.

Parameter yang diperlukan untuk penukaran ini ialah "kedudukan kamera", "titik minat kamera" dan "arah ke atas kamera". Orientasi kamera ditentukan oleh ketiga-tiga parameter ini. Rajah di bawah menunjukkan kamera dari perspektif pihak ketiga.

Rajah di bawah sebenarnya dilihat dari sudut pandangan kamera dengan susunan yang ditunjukkan dalam rajah di atas (pada ketika ini, kami masih belum menukar koordinat kepada skrin, jadi ia hanya imej).

Dalam penjelasan sebelumnya, nampaknya kamera diletakkan dan koordinat diubah, tetapi dalam pengiraan sebenar, koordinat dunia ditukar mengikut kedudukan dan orientasi kamera. Oleh itu, asalnya ialah kedudukan kamera seperti yang ditunjukkan dalam rajah di bawah.

Sistem koordinat projektif

Sebaik sahaja anda telah memutuskan dari kedudukan mana untuk melihat ruang 3D, langkah seterusnya ialah memproses paparan "objek kecil yang jauh" dan "benda besar yang berdekatan". Ini dipanggil transformasi projektif. Terdapat dua kaedah transformasi unjuran, "unjuran perspektif" dan "unjuran ortografi", tetapi imej "unjuran perspektif" yang biasa digunakan adalah seperti berikut.

Unjuran perspektif menggunakan parameter berikut: Sudut Tontonan, Nisbah Aspek, Kedudukan Klip Hadapan dan Kedudukan Klip Belakang. Kawasan berlabel "frustum" dalam rajah di atas akhirnya akan muncul pada skrin.

"Viewing Angle" menentukan julat tontonan yang boleh dilihat dari kamera. Mengurangkan sudut mengezum masuk, meningkatkannya mengezum keluar. Sudut tontonan akan menjadi nilai menegak frustum.

Nisbah Aspek digunakan untuk menentukan sudut pandangan mendatar, manakala sudut tontonan ialah sudut menegak. Sudut mendatar biasanya ditentukan oleh "sudut tontonan × nisbah aspek", dan nisbah aspek pada asasnya ialah nilai "lebar ÷ tinggi" skrin yang anda cuba paparkan. Jika anda menukar nilai ini, objek 3D yang dipaparkan akan kelihatan meregang secara mendatar atau menegak.

Kedudukan Klip Hadapan dan Kedudukan Klip Belakang ditentukan untuk menentukan sama ada objek dipaparkan dalam julat hadapan atau belakang. Oleh kerana sifat komputer, tidak mungkin untuk memaparkan sehingga infiniti, jadi kami akan menetapkan had. Nilai ini juga mempengaruhi ketepatan penimbal Z, jadi tidak disyorkan untuk memasukkannya ke dalam kawasan lukisan di luar julat yang tidak perlu dipaparkan.

Objek yang diubah perspektif ditukar kepada ruang seperti di bawah. Objek yang dekat dengan kamera dizum masuk, dan objek yang jauh dikecilkan.

Ini digambarkan dalam rajah yang mudah difahami di bawah.

Jika anda benar-benar melihatnya dari sudut pandangan kamera, ia kelihatan seperti di bawah.

Satu lagi kaedah transformasi projektif ialah unjuran ortografi, yang mengunjurkan kawasan yang boleh dilihat seperti di bawah. Oleh kerana lebar dan ketinggian adalah malar tanpa mengira kedalaman, saiz objek tidak berubah dengan kedalaman.

Sistem Koordinat Skrin

Selepas transformasi unjuran, ia ditukar kepada koordinat skrin sebenar. Walaupun ia adalah skrin, kedudukan dan julat paparan berubah bergantung pada tetapan port pandangan yang ditetapkan pada peranti. Walau bagaimanapun, dalam kes permainan, koordinat pelanggan tetingkap selalunya merupakan port pandangan seperti itu, jadi saya rasa anda tidak perlu terlalu risau.

Koordinat skrin (0, 0) ditukar daripada koordinat unjuran (-1, 1, z). Begitu juga, koordinat skrin (lebar, ketinggian) ditukar daripada koordinat unjuran (1, -1 ,z).