Saya setuju tentang buku-buku di atas dengan beberapa catatan:
Panduan pemrograman 8 OpenGL sekarang keluar dan telah dibangun ulang untuk OpenGL 4.3 modern.
The SuperBible 5th ed, memang menyediakan Anda akan sebuah perpustakaan kruk untuk memulai tetapi saat Anda membaca buku ini Anda mengimplementasikan kembali fungsi perpustakaan itu sehingga pada akhirnya Anda harus sepenuhnya berpengalaman. Saya juga sangat merekomendasikan membungkus barang-barang OpenGL dalam sesuatu jika Anda menggunakan bahasa berorientasi objek. Saya bekerja di perpustakaan saya sendiri untuk bersenang-senang yang tampaknya menjadi cara untuk pergi, menerapkannya sendiri. Saya memahami semua seluk beluk dan saya hanya perlu memasukkan bit yang sebenarnya saya gunakan. Anda juga dapat mengabstraksi beberapa hal seperti mengirim data ke shader (bukan shinyMaterial.setColor (Merah) jauh lebih baik), ini juga dapat membuat Anda mendukung beberapa hal dengan memberikan alternatif lama. Ada juga oglplus .
Masalah utama dengan mempelajari OpenGL 'inti' modern adalah bahwa untuk mendapatkan pipa dasar dan berjalan meskipun hanya untuk menggambar kubus Anda perlu memahami yang berikut:
- Operasi matriks (gunakan GLM jika Anda menggunakan C ++, Anda juga memerlukan versi MatrixStack OpenGL Unofficial SDK di sini , atau yang sederhana di sini .)
- Pemrograman shader GLSL.
- mengikat data ke shader dan Objek Penyangga Vertex. Jika Anda ingin mempelajari profil inti yang benar-benar murni, mereka semua perlu diimplementasikan secara bersamaan dan jika ada yang rusak, Anda tidak akan melihat apa-apa dan hampir tidak tahu di mana kesalahannya. Itu juga tidak mencakup hal-hal seperti pencahayaan dasar (di mana Anda perlu mempelajari algoritma peneduh di samping bahasa pemrograman).
Tetapi Anda tidak perlu mulai dengan orang yang bergantung pada profil inti. Gunakan beberapa fungsi yang sudah usang di awal, hampir semuanya masih akan mendukungnya, kemudian memodernisasi itu.
Masalah lain adalah bahwa OpenGL 'modern' dapat benar-benar merujuk pada 3 hal:
Yang pertama adalah pipeline shader yang dapat diprogram yang bertentangan dengan pipeline fungsi tetap. Teknik 'modern' inti telah dimungkinkan sejak OpenGL 2.0 dirilis pada 2004 ketika shader diperkenalkan (tutorialnya tidak diperbarui) juga 1.5 memiliki Vertex Buffer Objects yang merupakan landasan utama OpenGL modern. Masalahnya adalah bahwa bahkan hari ini pengembang OpenGL bahkan mungkin tidak dapat mengambil keuntungan dari semua hal itu, ada banyak netbook jelek di luar sana dengan chipset Intel yang hanya mendukung OpenGL 1.5 dan telepon seperti iPhone lama / Android yang hanya mendukung OpenGL ES 1.1. Satu-satunya perbedaan nyata antara hal-hal ini di OpenGL 2.0 dan OpenGL 3.x / 4.x adalah sekarang wajib untuk profil inti.
OpenGL modern juga bisa merujuk ke hal-hal baru yang ada di 3.x, 4.x. Hal-hal seperti Objek Array Vertex , Objek Framebuffer , Objek Penyangga Seragam / std140 , kualifikasi tata letak , subrutin GLSLdan seterusnya. Banyak dari mereka yang saya temukan dapat membuat hal-hal yang jauh lebih baik untuk diprogram. Mereka juga dapat secara halus mengubah jalur pipa engine keseluruhan Anda. Mereka juga hal-hal yang dengan sedikit usaha Anda dapat mendukung dengan membuat fungsi pembantu dan sebagainya (Misalnya menulis objek manajer shader generik yang dapat Anda gunakan untuk mengatur seragam, jika UBO didukung penggunaan yang sebaliknya mengelola mengunggah nilai ke shader secara manual , mungkin menaruh sedikit shader menulis ulang barang di sana untuk mengotomatiskannya). Hal ini hanya berjalan pada kartu video baru, Anda tidak akan melihat netbook yang mendukungnya atau konsol video game generasi sekarang (mereka menggunakan subset OpenGL mereka sendiri yang mirip dengan OpenGL ES). OSX terbaru hanya memiliki 3.
NextGL Ultra Modern nextgen. OpenGL 4.3 baru saja dirilis. Muncul dengan compute shaders, glMultiDrawElementsIndirect dan buffer penyimpanan shader. Hal ini memungkinkan untuk saluran pipa yang berbeda secara mendasar di mana Anda mengunggah semua data vertex ke GPU dan kemudian menggunakan penghitung komputasi untuk menghitung apa yang harus ditarik daripada melakukannya dalam program Anda. Sayangnya ini sangat baru jadi saya tidak tahu ada tutorial yang layak di sana. Lihatlah ulasan OpenGL 4.3 yang memberikan garis besar bagaimana ini bekerja (juga penulis mengatakan ada artikel GPU Pro yang akan dirilis menjelaskannya). Menjadi merek baru itu tidak akan didukung di mana pun pada tahap ini (kecuali jika Anda menggunakan kartu nvidia yang lebih baru dengan driver beta). Meskipun Anda mungkin dapat menggunakan OpenCL / CUDA untuk mengimplementasikannya.
Saya akan melewatkan glBegin, glEnd, glVertex *, glNormal *, glTextCoord *, glTranslate *, glRotate *, glLoadIdenity, glModelViewMatrix dan sebagainya. Alih-alih, mulailah dengan mempelajari Objek Penyangga Vertex tanpa shader, jangan coba 3D pada titik ini hanya segitiga putih datar sehingga Anda tidak harus bekerja dengan operasi 3d menggunakan matriks (karena Anda harus belajar mengikatnya ke shader segera jadi tidak masuk akal dalam belajar cara lama). Selanjutnya tambahkan dalam shader, Anda perlu mengubah bagaimana objek buffer vertex Anda terikat karena Anda sekarang ingin menggunakan atribut vertex. Pelajari cara mengomunikasikan properti kepada mereka melalui seragam. Kemudian pelajari operasi matriks dengan GLM, ikat matriks ke shader dan dapatkan 3D. Setelah Anda selesai maka pada dasarnya hanya mempelajari hal-hal yang lebih maju seperti texturing,
Beberapa tutorial OpenGL modern online umum, yang mencakup pipa pemrograman shader yang sebagian besar berfungsi dengan OpenGL 2.0+:
Untuk sumber belajar umum lainnya. OpenGL ES mungkin merupakan titik awal yang baik. OpenGL ES telah menghapus semua hal yang sudah usang. OpenGL 4.1 memiliki kompatibilitas penuh dengan OpenGL ES sehingga memungkinkan untuk mengambil program OpenGL ES dan menjalankannya di OpenGL 4.1. Dan prinsip-prinsip dasarnya sama untuk keduanya.
Beberapa hal yang perlu diperhatikan adalah bahwa OpenGL ES 3.0 baru saja dirilis tetapi karena ini baru, OpenGL ES 3.0 belum memiliki tutorial atau dukungan perangkat keras. Tampaknya tidak ada perubahan mendasar yang besar (seperti perbedaan antara pipeline tetap dan model shader yang kami lihat dengan OpenGL ES 1.0-> 2.0). Jadi Anda mungkin tidak akan belajar hal-hal yang ketinggalan zaman.
Selain itu, OpenGL ES akan sering menggunakan EGL sehingga Anda perlu mempelajari cara lain untuk membuka Window tetapi itu tidak terlalu sulit. Kalau tidak, ada beberapa pembungkus / emulator OpenGL ES di sekitar Anda atau Anda dapat belajar di Android / iPhone jika Anda memilikinya (atau melihat menggunakan emulator mereka).
Ada Panduan Pemrograman Addison Wesley OpenGL ES 2.0 yang setara dengan buku merah.
Anda juga dapat melihat hal-hal yang berfokus pada shader GLSL karena di situlah sebagian besar OpenGL modern hidup. Anda hanya perlu memastikan apa yang Anda pelajari mencakup sisi 'lem' yang mengikat OpenGL.
Lihat OpenGL Shading Language edisi 2 (Buku Oranye).
OpenGL 4.0 Shading Language Cookbook mencakup beberapa hal OpenGL yang lebih canggih tetapi bukan tutorial yang komprehensif. Sangat layak untuk mendapatkan pemahaman dalam praktik OpenGL dunia nyata terbaru seperti objek buffer seragam dan subrutin GLSL.
Akhirnya Anda bisa melihat WebGL, meskipun berada dalam JavaScript yang akan agak berbeda dan jauh lebih sulit untuk di-debug.