Saya seorang pemula untuk OpenGL modern. Saya nyaman dengan metodologi OpenGL langsung, tetapi saya belum pernah melakukan penggunaan serius VBO. Pertanyaan saya adalah tentang animasi. Dalam mode langsung, untuk mencapai animasi Anda hanya perlu melakukan streaming posisi vertex yang berbeda (diinterpolasi dari keyframe) di ruang objek.
Bagaimana ini dicapai dalam OpenGL tidak langsung? Jelas, mengunggah data VBO segar untuk setiap frame pasti akan memonopoli bus grafis. Saya belum menemukan literatur tentang cara modern untuk melakukannya. Memikirkannya, saya datang ke beberapa pilihan:
- Atribut: animasi sebagai offset 3d. Untuk setiap frame, atribut offset yang berbeda (mungkin diinterpolasikan) dilewatkan untuk setiap vertex, diterapkan pada vertex yang sama setiap frame kunci.
- Indeks: menyimpan kerangka kunci sebagai simpul absolut dan mengaksesnya melalui pengindeksan, menggunakan kumpulan simpul yang berbeda untuk setiap kerangka kunci. Saya menemukan pendekatan ini tidak mungkin, karena Anda tidak dapat mengakses keyframe yang berdekatan dan oleh karena itu tidak dapat melakukan interpolasi di antara mereka. Juga, sepertinya ide yang buruk untuk animasi prosedural.
- Tekstur: ini mungkin sangat melar tetapi terdengar seperti solusi yang bagus untuk saya. Sekali lagi, animasi dianggap sebagai offset xyz untuk setiap titik. Setiap keyframe dapat disimpan dalam tekstur 1D di mana dimensi memetakan ke vertexID. Jika saya tidak salah, di OpenGL 4.0 Anda dapat mengakses tekstur dari shader apa pun, sehingga Anda bisa membaca tekstur ini dari vertex shader dan menerapkan setiap transformasi vertex. Tekstur 2D bisa menampung beberapa bingkai. Anda masih melakukan interpolasi (dan jika interpolasi bekerja untuk tekstur di luar fragmen shader, yang saya tidak yakin, Anda dapat interpolasi linear secara gratis!) Ini dapat diterapkan pada sistem animasi yang lebih kompleks seperti animasi tulang tanpa banyak usaha.
Apakah saya terlalu memikirkan ini? Adakah yang bisa menjelaskan?