Ada banyak hal yang bisa Anda pelajari. Inilah pemikiran saya tentang masing-masing, dari perspektif seseorang yang baru ke OpenGL.
Contoh OpenGL
Ada banyak contoh kode di luar sana yang bisa Anda baca. Contoh G-truc cukup luas dan mencakup banyak fitur canggih.
Namun, jika Anda seorang pemula , belajar dari contoh adalah cara yang buruk untuk belajar. Membaca kode yang tidak benar-benar Anda pahami tidak akan mengajari Anda mengapa itu berhasil. Memang, teks pada halaman yang ditautkan di atas secara spesifik dan benar menyatakan bahwa contohnya bukan untuk pemula.
Belajar dari kode sumber telanjang, kecuali banyak berkomentar (pada saat itu tutorial) bukanlah hal yang mudah. Mencoba melakukan hal itu mendorong pemrograman bergaya kultus kargo dan penyalinan salin dan tempel. Sangat mudah untuk meyakinkan diri sendiri bahwa Anda memahami bagaimana sesuatu bekerja ketika semua yang Anda lakukan hanyalah menyalin kode dari satu tempat ke tempat lain. Anda mungkin dapat mencampur dan mencocokkan hal-hal, tetapi pemahaman yang benar sulit dicapai tanpa bahan pengajaran yang tepat.
Buku OpenGL
Ada cukup banyak buku yang bisa dibeli untuk pengembangan OpenGL. Saya akan membahas dua hal terbesar di sini.
OpenGL Redbook
Yang ini agak bermasalah dari sudut pandang murni praktis. Lihat, edisi ke-7 mencakup GL 3.0 dan 3.1. Yang agak tua. Ada banyak fitur berguna yang ditambahkan ke OpenGL sejak saat itu, fitur yang mengubah cara Anda menulis sesuatu. Dan tidak semuanya adalah fitur perangkat keras.
Edisi 8 akan datang "segera", dan akan mencakup 4.1. Tidak ada kata apakah itu mencakup hal-hal fungsi tetap lama.
Menurut saya buku ini baik-baik saja. Masalah terbesar dengan itu adalah organisasi informasi. Ini lebih seperti manual referensi komprehensif daripada buku yang dibuat untuk belajar. Inilah yang saya maksud.
Salah satu hal terpenting yang harus dilakukan seseorang ketika mengajar adalah tidak membebani siswa dengan informasi yang tidak penting. Tetapi Redbook melakukan hal itu. Saat memperkenalkan materi, itu memperkenalkan banyak materi. Banyak dari itu tidak berguna untuk tugas yang ada.
Apa yang Anda bicarakan dan ketika Anda membicarakannya sangat penting untuk menjadikan buku Anda sumber belajar yang baik. Redbook tidak pernah menahan informasi sampai waktu yang lebih tepat. Ketika berbicara tentang cara menggambar segitiga dan primitif, itu berbicara tentang segala sesuatu tentang menggambar mereka, sekaligus. Ini mencakup setiap opsi, setiap fungsi, setiap parameter, dll.
Itu bukan organisasi informasi yang bagus.
OpenGL Luar Biasa
Edisi kelima buku ini hanya mencakup inti GL 3.x, jadi tidak ada fungsi tetap.
Namun, organisasi umum buku ini kurang lebih identik dengan organisasi versi edisi keempat. Ini sepertinya tidak mungkin karena edisi ke-4 menggunakan fungsi-tetap dan tidak memperkenalkan shader sampai lama kemudian.
Cara ini dilakukan adalah keluhan nomor 1 saya tentang buku itu. Pada dasarnya, penulis membangun perpustakaan yang mengimplementasikan bentuk fungsi tetap OpenGL. Itu membungkus VAO, objek buffer, shader, dan berbagai hal lainnya, sehingga ia bisa menggambar objek, matriks matematika, dan tekstur tanpa harus membicarakan hal-hal seperti cara kerja pipa GL secara detail.
Dengan menyembunyikan semua detail ini, itu membuat materi lebih mudah dicerna. Tetapi Anda akan sering melihat orang-orang berjalan menjauh dari Superbible tanpa mengetahui bagaimana sebenarnya berfungsi tanpa perpustakaan. Mereka tidak benar-benar memahami bagaimana shader terhubung ke objek penyangga, bagaimana data mengalir di atas pipa, dll.
Ini adalah buku yang bisa diservis, lebih dari Redbook. Jika semuanya gagal, itu akan melakukan pekerjaan. Tapi saya pikir itu bisa lebih baik.
Juga, menurut beberapa pengulas, sepertinya melewatkan informasi bermanfaat tertentu, seperti mengemas data atribut menggunakan nilai normal dan semacamnya.
Bahan Online OpenGL
Ada banyak materi online yang bisa dipelajari.
Tutorial NeHe
Tutorial NeHe , seperti yang dinyatakan orang lain, sudah sangat ketinggalan zaman. Mereka fokus pada fungsi tetap OpenGL. Sering dinyatakan bahwa mudah untuk mempelajari fungsi-tetap GL, yang benar. Tapi itu tidak membuatnya menjadi ide yang bagus.
Memahami bagaimana pipeline fungsi tetap benar- benar berfungsi adalah sulit. Saya akan mengatakan bahwa itu lebih sulit daripada belajar shader. Setelah Anda mendapatkannya, shader sederhana. Memahami seluk-beluk hal-hal lingkungan tekstur, combiners dan yang lainnya, sangat rumit dan memerlukan kunjungan sering ke dokumen rujukan untuk memastikan semuanya diatur dengan benar. Bahkan jika Anda memahami semuanya dengan benar, mudah untuk membuat kesalahan kecil yang menyebabkan semuanya rusak.
Perbedaannya adalah bahwa Anda dapat membuat fungsi tetap berfungsi tanpa memahaminya. Ini mendorong pemrograman pemujaan kargo. Itu memungkinkan untuk mendapatkan sesuatu di layar tanpa benar-benar mengetahui apa yang dilakukan seseorang. Selama di forum OpenGL.org, kami melihat pertanyaan terus-menerus tentang hal-hal kecil seputar fungsi tetap, mulai dari orang yang tidak tahu bagaimana gluLookAt bekerja, hingga kesulitan dengan pencahayaan, hingga orang yang mencoba mendapatkan efek khusus untuk bekerja dengan lingkungan tekstur.
Jadi tidak, saya tidak berpikir NeHe adalah cara yang baik untuk belajar OpenGL.
Komentar di atas dapat digunakan untuk tutorial berbasis non-shader, seperti Swiftless , Lighthouse , dan sebagainya.
Pemrograman OpenGL Wikibook
Pemrograman OpenGL Wikibook mungkin setara dengan modern untuk NeHe. Ini mencakup GL versi 2.1, karena mereka ingin tetap relevan dengan platform seluler. Jika itu penting bagi Anda, maka tentu saja lihat di sini.
Masalah lain dengan NeHe, dan dengan demikian Wikibook ini, adalah fokus besar pada kode sumber. Rasio teks ke kode sangat kecil; ada banyak kode, tetapi teks tidak benar-benar menjelaskan cara kerjanya.
Sebagai contoh, lihat di bagian bawah Tutorial 2. Ini memperkenalkan blending. Tidak disebutkan bagaimana blending bekerja. Itu tidak mengatakan apa yang glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
sebenarnya berarti atau tidak. Itu hanya mengatakan, "Ini beberapa kode yang membuat semuanya transparan."
Itu bukan lingkungan belajar terbaik.
Tutorial Tidak Lengkap
Swiftless memiliki seperangkat OpenGL 4.x tutorial . Perangkat Lunak Durian juga memiliki beberapa tutorial OpenGL berbasis shader . Dan ada tutorial "OpenGLBook.com" .
Kesamaan yang dimiliki semua ini adalah ... bahwa mereka tidak lengkap dan ditinggalkan. Mereka semua mendapat sekitar 4-5 tutorial, dan kemudian dibatalkan. Tak satu pun dari mereka mencapai tekstur, pencahayaan, atau yang seperti itu. Yah, Durian memang menekan tekstur tetapi tidak pencahayaan.
Banyak yang bisa dilihat dari mereka, tetapi ada banyak yang hilang juga.
Promosi Diri yang Tidak Memalukan
Meninjau tutorial Grafik 3D Modern saya sendiri akan menjadi konflik kepentingan yang mengerikan. Jadi sebagai gantinya, saya akan membahas panjang lebar tentang organisasi di belakang mereka dan mengapa saya pikir mereka baik.
Oh dan ya, saya sedang mengerjakan Tutorial 17. Proyek ini belum mati.
Tiga bab pertama benar-benar mempelajari cara kerja pipeline OpenGL. The Superbible gagal karena mencoba menyembunyikan detail. Sebagai gantinya, saya berusaha menjelaskan perincian itu dengan sangat, sangat baik. Berkali-kali. Pendahuluan menjelaskan pipa dalam teks biasa. Tutorial pertama menjelaskannya dengan iringan kode. Dan tutorial kedua semakin mengunjunginya.
Dari sana, saya secara alami beralih ke memposisikan objek. Ini memperkenalkan seragam, tapi saya tidak ingin memasukkan seragam dan proyeksi perspektif secara bersamaan. Jadi saya memisahkan dua konsep. Setelah proyeksi, penyanggaan kedalaman tampaknya merupakan langkah selanjutnya yang masuk akal, diikuti oleh bagaimana transformasi dan matriks bekerja. Setelah itu, kamera. Rotasi dengan angka empat adalah tambahan terlambat, tapi saya merasa itu adalah hal penting untuk dibicarakan bagi programmer grafis pemula.
Tutorial pencahayaan sekali lagi membangun satu di atas yang lain. Pencahayaan difus, lalu per fragmen, lalu specular. Rentang dinamis adalah pilihan yang menarik. Sebagian besar materi pengantar mencoba untuk menjauh dari itu, tetapi saya menerimanya. Anda bukan programmer grafis akhir-akhir ini jika Anda berpikir intensitas cahaya selalu ada pada kisaran [0, 1]. Dan Anda bukan programmer grafis hari ini jika Anda tidak tahu bagaimana mempertahankan pipa warna linier.
Yang terakhir dalam pencahayaan, pada penipu, adalah yang aneh. Saya mencoba mendesain tutorial yang menyelesaikan masalah dan bukan hanya menunjukkan beberapa fungsi OpenGL, terutama saat buku berjalan. Begitu banyak dari desain tutorial saya berasal dari menemukan cara untuk berbicara tentang topik-topik tertentu sambil tetap membuat mereka masalah nyata dan tidak jelas, "kita sedang belajar X sekarang." Geometri shaders adalah yang sulit, karena mereka tidak benar-benar menyelesaikan banyak masalah.
Penipu mewakili masalah yang sebenarnya berguna untuk diselesaikan oleh GS. Juga, itu memungkinkan saya untuk berbicara tentang hal-hal lain yang kurang digunakan seperti discard
dan mengubah kedalaman sebuah fragmen. Dan itu benar-benar menunjukkan kekuatan shader: Anda dapat membuat kotak datar menjadi bola.
Tutorial texturing juga menarik. Salah satu alasan saya menunda berbicara tentang tekstur warna difus sampai yang ketiga adalah menunda berbicara tentang tekstur sRGB untuk sementara waktu. Dengan cara ini, saya dapat berbicara tentang masalah dasar di sekitar tekstur (memuat data, meletakkannya di shader, menyaring, menjepit, dll) tanpa harus berurusan dengan masalah linier. Jadi saya bisa menghabiskan seluruh tutorial hanya pada topik itu. Itu memungkinkan saya untuk benar- benar menekankan betapa pentingnya mempertahankan pipa warna linier.
Ini salah satu dari kencing binatang peliharaan saya.