Saya menggunakan SDL2 .
Saat ini satu-satunya shader saya memiliki matriks MVP , dan mengubah poin dengan itu.
Saya menghitung matriks Tampilan dan Proyeksi untuk kamera dengan GLM:
glm::lookAt(pos, pos + forward, up);
glm::perspective(fov, aspectRatio, zNear, zFar);
Saya mencarinya, tetapi saya hanya dapat menemukan implementasi warisan dari beberapa viewports.
Jika saya membuat misalnya 4 kamera dan katakan saja semuanya sama , kecuali setiap kamera memiliki seperempat layar berbeda untuk ditampilkan. (Jadi saya ingin 4 viewports dengan konten yang sama)
Bagaimana saya bisa melakukan ini? Maaf jika saya tidak memberikan informasi yang cukup, jangan ragu untuk bertanya.
Jawaban:
Rendering ke berbagai viewports (bagian) dari layar yang sama dapat dilakukan sebagai berikut:
Misalnya membagi layar menjadi empat bagian dan menampilkan adegan yang sama empat kali ke setiap sudut dengan seragam yang berbeda dan viewports yang berbeda:
sumber
viewport
adalah x, y sudut kiri bawah chunk dan lebar, tinggi chunk. Dengan memadukan Anda dapat bereksperimen.Jika Anda menulis Vertex / Fragment Shader Anda sendiri, ada kemungkinan tambahan untuk melakukan ini. Ini jauh lebih rumit tetapi mungkin berguna untuk Anda dan / atau orang lain. Selain itu ia mempercepat seluruh proses menggambar karena hanya menggunakan satu panggilan ke perintah menggambar. Jumlah maksimum Viewports ditentukan oleh GL_MAX_VIEWPORTS dan biasanya 16.
Sejak OpenGL 4.1 ada metode glViewportArrayv . Itu dapat menentukan array Viewports. Viewports yang dibuat oleh metode ini memiliki indeks yang ditetapkan.
Indeks ini dapat digunakan dalam Vertex Shader untuk mengatur Viewport tempat adegan dibuat. (Anda harus memasukkan ekstensi " ARB_shader_viewport_layer_array " dalam kode shader)
Dalam kasus Anda, saya akan menyarankan untuk melakukan hal berikut:
sumber
Ini adalah salinan jawaban @ narthex, kecuali hanya dengan viewports karena hanya itu yang Anda butuhkan. Saya tidak yakin mengapa hal-hal buffer bingkai / campuran termasuk dalam jawabannya.
sumber
Ini semua adalah jawaban yang baik, namun ada cara lain: (Bukankah selalu ada?)
Karena semakin populernya realitas virtual, orang-orang di OculusVR telah mengembangkan trio ekstensi "Multiview" yang disebut:
Ekstensi ini memungkinkan beberapa tampilan adegan yang sama untuk ditampilkan dalam satu panggilan undian, menghilangkan redundansi rendering adegan yang sama dalam keadaan yang sama dari sudut pandang masing-masing mata. Meskipun dibuat untuk tujuan VR, pengembang tidak harus terbatas hanya pada dua pandangan. Sebaliknya, ekstensi ini memungkinkan untuk dilihat sebanyak yang ditentukan oleh MAX_VIEWS_OVR .
Sebelum menggunakan ekstensi ini, pengembang harus memeriksa dukungannya pada driver grafis pengguna dengan menambahkan kode berikut:
Dari sana, Anda perlu mengatur framebuffer Anda untuk menggunakan fitur ini:
dan juga di shader:
Dalam aplikasi yang terikat CPU, ekstensi ini dapat secara dramatis mengurangi waktu render, terutama dengan adegan yang lebih kompleks :
sumber