Tujuan dari Model View Projection Matrix

102

Untuk tujuan apa kita menggunakan Model View Projection Matrix? Mengapa shader memerlukan Model View Projection Matrix?

Yuriy Vikulov
sumber
12
Lihat saja tautan ini: songho.ca/opengl/gl_transform.html
iKushal
3
Saya menyarankan untuk membuka situs Stack Exchange yang didedikasikan untuk Grafik Komputer, dan memilih pertanyaan ini sebagai pertanyaan contoh . Ikuti computergraphics.stackexchange.com jika Anda tertarik melihat situs tersebut diluncurkan!
hapus

Jawaban:

196

Matriks model, tampilan, dan proyeksi adalah tiga matriks terpisah. Model peta dari ruang koordinat lokal objek ke ruang dunia, pandangan dari ruang dunia ke ruang kamera, proyeksi dari kamera ke layar.

Jika Anda membuat ketiganya, Anda dapat menggunakan satu hasil untuk memetakan seluruhnya dari ruang objek ke ruang layar, membuat Anda dapat mengerjakan apa yang perlu Anda sampaikan ke tahap berikutnya dari pipeline yang dapat diprogram dari posisi vertex yang masuk.

Dalam pipeline fungsionalitas tetap yang lama, Anda akan menerapkan model dan tampilan bersama-sama, kemudian mengerjakan pencahayaan menggunakan hasil lain yang diturunkan darinya (dengan beberapa perbaikan sehingga misal normals masih merupakan satuan panjang bahkan jika Anda telah menerapkan beberapa penskalaan ke objek ), lalu terapkan proyeksi. Anda dapat melihatnya tercermin dalam OpenGL, yang tidak pernah memisahkan model dan matriks tampilan - menjaganya sebagai satu tumpukan matriks tampilan model. Oleh karena itu, terkadang Anda juga melihatnya tercermin dalam shader.

Jadi: matriks proyeksi tampilan model yang disusun sering digunakan oleh shader untuk memetakan dari simpul yang Anda muat untuk setiap model ke layar. Itu tidak wajib, ada banyak cara untuk mencapai hal yang sama, itu biasa saja karena memungkinkan semua kemungkinan transformasi linier. Karena itu, versi yang lebih sedikit tersusun juga merupakan norma di dunia saluran pipa tetap.

Tommy
sumber
3
jadi untuk beberapa objek (mesh) kita membutuhkan beberapa matriks modelView, bukan?
Yuriy Vikulov
5
Dengan asumsi mereka mungkin bergerak secara mandiri atau telah diposisikan secara terpisah, maka ya. Jadi itulah cara paling umum untuk melanjutkan - meneruskan modelView atau projectionModelView sebagai seragam ke program shader, setelah menyiapkannya untuk model saat ini di CPU.
Tommy
Hai Tommy, dapatkah Anda menyarankan kode contoh apa pun untuk fungsi pan di Opengl Es2.0 di Android menggunakan Model View Projection Matrix jika Memungkinkan. Saya mereferensikan lebih banyak tautan, saya tidak bisa mendapatkan ide yang jelas. Jika ada contoh kode yang berarti, mudah untuk saya mengerti ..
harikrishnan
1
Saya punya pertanyaan. Jika openGL menggunakan matriks MV sebagai satu dan jika kita beralih dari ruang kamera ke ruang dunia, kita perlu membalikkan (matriks proyeksi * matriks tampilan) * (posisi kursor) tetapi jika tampilan model adalah salah satu matriks yang tersusun. bagaimana kita memisahkan model dan matriks tampilan sehingga saya dapat menggunakan matriks tampilan untuk perhitungan itu. Jadi saya perlu memisahkan mereka?
Evren Bingøl
@ EvrenBingøl Apakah Anda sudah mendapatkan jawabannya? Saya memisahkan model dan matriks tampilan saya, tetapi saya ingin mengetahui jawaban sebenarnya atas pertanyaan Anda apakah saya harus terus membuatnya terpisah atau tidak.
tom_mai78101
9

Karena matriks itu nyaman. Matriks membantu untuk mengubah lokasi / arah sehubungan dengan ruang yang berbeda (Sebuah ruang dapat ditentukan oleh 3 sumbu tegak lurus dan satu titik asal).

Berikut adalah contoh dari buku yang ditentukan oleh @ legends2k di komentar.

Penduduk Cartesia menggunakan peta kota mereka dengan asal yang berpusat dengan cukup tepat di pusat kota dan sumbu diarahkan di sepanjang titik mata angin kompas. Penduduk Disleksia menggunakan peta kota mereka dengan koordinat yang dipusatkan pada titik yang berubah-ubah dan sumbu yang mengarah ke beberapa arah yang mungkin tampak sebagai ide yang bagus pada saat itu. Penduduk kedua kota cukup senang dengan peta masing-masing, tetapi Insinyur Transportasi Negara menugaskan tugas untuk menyiapkan anggaran untuk jalan raya pertama antara Cartesia dan Disleksia membutuhkan peta yang menunjukkan detail dari kedua kota, yang karenanya memperkenalkan koordinat ketiga. sistem yang lebih unggul darinya, meski belum tentu ke orang lain.

Ini contoh lainnya,

Asumsikan bahwa Anda telah membuat objek mobil dalam permainan dengan posisi puncaknya menggunakan koordinat dunia. Misalkan Anda harus menggunakan mobil yang sama ini di beberapa permainan lain di dunia yang sama sekali berbeda, Anda harus menentukan posisinya lagi dan perhitungannya akan rumit. Ini karena Anda sekali lagi harus menghitung posisi jendela, kap, lampu depan, roda, dll., Di dalam mobil sehubungan dengan dunia baru.

Lihat video ini untuk memahami konsep model, tampilan dan proyeksi. (sangat dianjurkan)

Kemudian lihat ini untuk memahami bagaimana simpul di dunia direpresentasikan sebagai Matriks dan bagaimana mereka ditransformasikan.

cegprakash.dll
sumber
Jika Anda memikirkannya secara mendalam, Anda akan menyadari bahwa meskipun transformasi didasarkan pada asal objek (yaitu titik tunggal), semua simpul dari objek (mesh / model secara formal) akan mengalami transformasi yaitu semua 1000 simpul akan dikalikan dengan model matriks. Karenanya poin Anda tidak terbentuk dengan baik. Matriks model hanyalah matriks yang mengubah simpul dalam ruang model menjadi ruang dunia. Tidak ada manfaat kinerja di sini, ini hanya kenyamanan.
legends2k
Jika demikian, mengapa mereka tidak mewakili setiap titik dalam satu ruang 3D? Seharusnya ada keuntungan ketika Anda menggunakan keluaran dari sebuah adegan ke adegan lain yang dapat menjadi masukan ke adegan lain yang dapat dipindahkan :)
cegprakash
1
Mereka tidak mewakili semua simpul dalam satu ruang karena akan lebih mudah untuk bekerja di ruang relatif daripada di ruang yang lebih besar, seperti dunia. Katakanlah robot, ketika diperintahkan untuk bergerak 2 meter ke depan, melakukannya dengan benar lebih tepat daripada menemukan pusat dunia, kemudian menghitung koordinat resultan yang benar.
legends2k
Saya pikir Anda benar .. Bagaimanapun fragmen shader akan dipanggil untuk setiap piksel dan kami akan melakukan perkalian matriks untuk setiap piksel dalam kasus jerat yang kompleks. : |
cegprakash
2
Dalam shader fragmen, hanya perhitungan pencahayaan / pewarnaan yang dilakukan, pada saat data mencapai shader fragmen, semua kalkulasi posisi selesai (yaitu dalam shader vertex); penjelasan yang lebih baik tentang mengapa menggunakan sistem koordinat ganda ada di sini . Buku ini adalah sumber daya matematika game 3D yang luar biasa. The bab yang sama sebagai PDF sampel dari situs buku .
legends2k