Sumber daya yang bagus untuk mempelajari OpenGL modern (3.0 atau lebih baru)? [Tutup]


73

Saya menemukan pencarian sumber yang bagus untuk memulai dengan OpenGL (3.0 atau lebih baru). Yah, saya menemukan banyak buku tetapi tidak ada yang dapat dianggap sebagai sumber yang bagus!

Berikut dua contoh:

Panduan Pemrograman OpenGL (edisi 7) http://www.amazon.com/exec/obidos/ASIN/0321552628/khongrou-20 Ini PENUH bahan yang sudah usang! Hampir setiap bab dimulai dengan catatan tentang itu.

OpenGL Superbible (Edisi 5) http://www.amazon.com/exec/obidos/ASIN/0321712617/khongrou-20 Buku ini menggunakan perpustakaan yang dibuat oleh penulis untuk menjelaskan argumen utama, menyembunyikan apa yang ingin Anda pelajari! Saya tidak ingin belajar cara menggunakan perpustakaan Anda! Saya ingin belajar OpenGL!

Saya harap Anda mengerti ini bukan pertanyaan yang sama seperti "hei saya tidak dapat menggunakan Google ... beritahu saya cara belajar OpenGL". Saya baru saja menyelesaikan pencarian penuh dan mendalam, tetapi saya tidak dapat menemukan sumber yang bagus dan lengkap untuk mempelajari OpenGL "baru" dengan menghindari topik yang sudah usang.

Bisakah seseorang mengarahkan saya ke arah yang benar? Saya tahu C ++ dan saya memiliki 10 tahun pengalaman dalam pengembangan ... di mana saya dapat menemukan sumber yang bagus ?! Saya ingin menghabiskan waktu untuk itu dan saya ingin belajar secara mendalam.

Jawaban:


69

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.


3
+1, wow. Satu-satunya perubahan kecil yang saya sarankan adalah menggunakan array vertex sisi klien di awal karena mereka merupakan jalur yang lebih mudah ke VBO tetapi tanpa beberapa perangkap beruang yang dapat dikuasai oleh pemula.
Maximus Minimus

1
Saya pikir itu yang terbaik untuk menghindari secara khusus belajar / menggunakan fungsi yang sudah usang karena itu akan menjadi hal-hal yang harus dihapus. Hal-hal usang lainnya yang saya sarankan untuk digunakan adalah hal-hal yang akan dilakukan OpenGL secara default, seperti bisa me-render tanpa menggunakan shader dan menganggap atribut vertex 0 adalah posisi yang keduanya harus meledak ketika menyalakan profil inti.
David C. Bishop

2
Edisi ke-6 dari SuperBible baru saja dirilis dan ini JAUH lebih baik daripada edisi ke-5. Saya sangat, sangat merekomendasikannya, mudah untuk mengikuti dan belajar OpenGL modern dengan.
Philip

2
Situs Arcsynthesis gltut tidak lagi tersedia, tetapi tutorialnya masih dapat diunduh dari bitbucket.org/alfonse/gltut/wiki/Home
Arto Bendiken

15

Lupakan buku paling tidak sampai edisi ke 8 dari panduan pemrograman keluar.

Selain tutorial yang disebutkan , saya menemukan situs ini sangat membantu, karena melewati dasar-dasar yang cukup cepat. Keduanya merupakan pengantar yang bagus untuk OpenGL modern. Setelah Anda melewatinya, Anda hanya perlu dokumentasi, OpenGL mudah digunakan setelah Anda terbiasa. Sisanya adalah teori grafis komputer dan matematika.


11

Saya telah berada dalam situasi yang sama persis dengan Anda dan akhirnya menemukan apa yang saya butuhkan untuk melanjutkan.

Kepala pertama di sini: http://www.arcsynthesis.org/gltut/ . Situs ini fantastis, contoh-contoh kerja yang baik, dan penjelasan mendalam tentang apa yang sedang terjadi. Meskipun kode ditulis dalam C ++ saya menggunakan ini untuk mengajari saya menulis demo OpenGL di Lisp. Ini juga benar-benar bebas dari cara lama dalam melakukan sesuatu sehingga Anda tidak perlu khawatir tentang mengambil kebiasaan buruk.

Saya akan menekankan bahwa meskipun 'hanya situs web lain', saya belum menemukan buku yang memberikan penjelasan dasar yang bersih dan ringkas seperti ini.

Setelah Anda melewati situs di atas, Anda sudah memiliki pemahaman dasar tentang shader dan banyak hal yang perlu Anda ketahui sekarang dapat di-Google-goog (lihat baik-baik sumber daya webgl atau webgl saat mereka menghapus semua barang yang sudah usang) atau ditemukan di situs wiki terbuka. Yang kemudian sangat samar jika Anda tidak memiliki dasar-dasar dari situs arcsintesis di bawah ikat pinggang Anda, tetapi cukup membantu ketika Anda tahu kira-kira apa yang Anda cari.

Juga untuk melihat lebih dalam pada GLSL kemudian melihat: OpenGL Shader Language (The Orange Book) Saya sedang mengerjakan ini dengan sangat lambat tetapi akan memberi Anda pemahaman tentang menulis shader untuk memungkinkan Anda melanjutkan pencarian ini. Saya akan memperingatkan Anda bahwa buku ini memang memiliki, dalam kata-kata pengulas, "200 halaman konten berkualitas tinggi yang dikemas ke dalam buku 600 halaman" tetapi sejarah dan info tambahan dapat memberikan konteks yang Anda butuhkan untuk memahami rute yang OpenGL sebagai standar telah turun (baik itu membantu saya!)

Saya harap ini membantu dan semoga beruntung, saya berharap untuk melihat / memainkan pekerjaan Anda di masa depan!

MEMPERBARUI

Tampaknya arcsintesis sedang offline, namun situs tersebut telah dikonversi ke pdf di sini dan kode telah dicerminkan di sini .

Juga dalam beberapa tahun sejak jawaban asli saya learnopengl.com/ telah menjadi sangat brilian. Sementara saya masih merekomendasikan arcsintesis untuk keunggulan mentah dari pengantarnya ke pembuka modern, situs learnopengl mencakup jauh lebih banyak daripada yang dilakukan arcsystesis, dan mengelolanya dengan bahasa yang dapat didekati, kami membuat contoh dan kode sumber terbuka. Pada dasarnya, ini sangat bagus, lihatlah!

Berkenaan dengan buku saya tidak terlalu jauh dengan buku oranye tetapi dapat merekomendasikan edisi ketiga 'Real-Time Rendering' . Setelah Anda siap untuk hal-hal teknis, buku ini adalah tambang emas.


2
YA TUHAN! tautan pertama sangat fantastis!
MatterGoal

Situs gltut tidak lagi tersedia, tetapi tutorialnya masih dapat diunduh dari bitbucket.org/alfonse/gltut/wiki/Home
Arto Bendiken

Poin yang bagus, saya akan memperbarui posting saya dengan rekomendasi tambahan juga.
Baggers


5

Dua situs yang sangat membantu saya adalah: http://www.arcsynthesis.org/gltut/ dan http://ogldev.atspace.co.uk/

Juga, wiki OpenGL adalah sumber yang sangat bagus dan terkini.

Setelah Anda melewati ini, saya sangat merekomendasikan untuk menggigit peluru dan membaca spesifikasi OpenGL. Maka Anda akan menjadi pro.


Ya, saya menemukan tutorial online jauh lebih bermanfaat daripada kebanyakan buku. Edisi ke-5 SuperBible sangat mengecewakan.
Philip

Situs gltut tidak lagi tersedia, tetapi tutorialnya masih dapat diunduh dari bitbucket.org/alfonse/gltut/wiki/Home
Arto Bendiken

4

Buku terbaik yang pernah saya temui yang mencakup OpenGL "modern" adalah http://www.packtpub.com/opengl-4-0-shading-language-cookbook/book

Meskipun ini adalah "buku masak", buku ini memandu Anda melalui langkah-langkah yang diperlukan untuk mengatur rendering dan jenis perpustakaan pendamping yang Anda perlukan (image lib, vektor lib matematika).

Selain itu ia melewati segala macam hal umum yang Anda mungkin ingin menggunakan OpenGL untuk, tanpa menggali terlalu dalam apa pun (seperti untuk bayangan, itu mencakup pemetaan bayangan dan menyaring peta bayangan, tetapi tidak masuk ke salah satu dari lebih metode pemetaan bayangan yang kompleks).

Saya juga merekomendasikan untuk membeli buku oranye.


@Jari terima kasih. Bukankah itu "hanya" tentang shader? Maksud saya, apakah buku ini memperkenalkan teknik OpenGL dan juga shader?
MatterGoal

2
@MatterGoal: OpenGL Modern hampir sepenuhnya berbasis shader. Buku ini membahas sisi mengikat OpenGL. Saya juga merekomendasikan buku ini tetapi sebagai pendamping untuk hal lain, buku ini tidak benar-benar untuk buku inti tetapi menunjukkan beberapa penggunaan praktik moddrn dunia nyata.
David C. Bishop

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.