Per Komputasi Vertex dalam OpenGL Tesselation

9

Saya mencoba menerapkan simulasi kain berbasis posisi menggunakan perangkat keras tesselation. Ini berarti saya hanya ingin mengunggah quad kontrol ke kartu grafis dan kemudian menggunakan tesselation dan geometri shading untuk membuat simpul di kain.

Ide ini mengikuti makalah:

Huynh, David, "Simulasi kain menggunakan perangkat keras tessellation" (2011). Tesis. Institut Teknologi Rochester http://scholarworks.rit.edu/theses/265/

Saya tahu cara menggunakan tesselation untuk membuat poin simulasi. Apa yang saya tidak tahu adalah bagaimana menyimpan informasi yang dikomputasi ke dalam framebuffer.

Geometri dan juga shader evaluasi tesselation memiliki informasi yang diperlukan untuk perhitungan per-verteks. Tapi bisakah mereka langsung menulis ke framebuffer?

Shader-fragmen yang saya tahu dapat menulis ke framebuffer, tetapi informasi saya akan diinterpolasi dan saya tidak lagi tahu apa yang harus ditulis di posisi mana.

Dragonseel
sumber
mengubah buffer umpan balik
ratchet freak
Kedengarannya sangat bagus. Kendala dari simulasi kain mengharuskan saya dapat mengakses semua tetangga dari suatu partikel (untuk menghitung gaya pegas). Bisakah ini dilakukan dengan buffer seperti itu? Mungkin dalam geometri shader? untuk mencegah buffer umpan balik untuk mencetak setiap dhuwur beberapa kali, saya ingin menggunakan GL_POINTS. Setelah melihat pertama kali tampaknya hal ini membuat lebih sulit untuk menghitung mata air.
Dragonseel

Jawaban:

3

Berdasarkan komentar "ratchet freak", saya meneliti Transform Feedback Buffer dan menyelesaikan masalah saya dengan cara itu.

Saya sekarang menghasilkan titik-titik simulasi pada CPU dan memasukkannya ke dalam VertexBufferObject. Saya menghasilkan VBO kedua untuk poin (bersama dengan yang lain untuk kecepatan). Konektivitas kain diberikan sebagai atribut vertex di ivec4.

Menggunakan buffer umpan balik transformasi dan trik buffering ganda menggunakan dua VBO, saya selalu bisa membaca dari langkah terakhir (menggunakan info konektivitas) dan menulis ke buffer lain. Ini untuk menyelesaikan masalah dengan konkurensi.

Perhitungan dilakukan dalam vertex-shader sebagai GL_POINTS. Mengikat output dari shader pertama ke shader biasa lainnya menggunakan indeks-buffer tambahan untuk menghasilkan segitiga saya bisa tanpa kesulitan membuat kain seperti yang saya inginkan.

Gagasan ini mengikuti contoh transformasi umpan balik umpan balik yang dibuat dalam buku "OpenGL Superbible" http://www.openglsuperbible.com/

Dragonseel
sumber