Saya telah menggunakan OpenGL ES di iPhone untuk sementara waktu sekarang dan pada dasarnya saya merasa sangat tersesat di luar untuk serangkaian kecil perintah yang saya lihat dalam contoh dan diadopsi sebagai milik saya. Saya ingin menggunakan OpenGL di platform lain dan memiliki pemahaman yang baik tentang itu.
Setiap kali saya mencari buku, saya menemukan Alkitab BESAR ini yang tampaknya tidak menarik dan sangat sulit bagi pemula. Jika saya memiliki beberapa akhir pekan untuk dihabiskan untuk belajar OpenGL apa cara terbaik untuk menghabiskan waktu (dan uang) saya?
Jawaban:
Hati-hati ketika Anda melihat tutorial OpenGL, karena banyak dari mereka (NeHe) termasuk hanya mengajarkan Anda hal-hal yang tidak boleh Anda lakukan lagi. Todays OpenGL adalah binatang yang berbeda dari 10 tahun yang lalu.
Beberapa contoh yang bagus untuk menghindari barang-barang usang dapat ditemukan di sini: http://www.g-truc.net/post-tech-content-sample.html
sumber
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.
sumber
preamake
tahap itu sendiri :( ... Ini akan sangat membantu, jika di waktu luang Anda, Anda dapat mencoba menjalankan tutorial kode Anda dengan Ubuntu + Eclipse. Untuk saat ini, cara lain yang saya ikuti adalah dengan menggunakan bahan bacaan yang Anda berikan dan mengaitkannya dengan beberapa tutorial kode lainnya. Alasannya adalah bahwa saya telah melihat "arcsintesis" tempat terbaik di web hingga sekarang untuk pembelajaran OpenGL pemula.Saya akan merekomendasikan mulai dengan seri tutorial ini, mereka baik dan menggunakan lebih banyak fitur modern daripada yang http://duriansoftware.com/joe/An-intro-to-modern-OpenGL.-Table-of-Contents.html
sumber
Satu-satunya buku saya di OpenGL adalah "OpenGL SuperBible, edisi ke-4" dan ke-5 akan dirilis dalam beberapa minggu. Saya pikir itu baik untuk pemula dan programmer tingkat lanjut.
Sunting: Saya mungkin menambahkan jangan mengikuti tren teknologi terbaru jika Anda baru belajar memprogram. Peluangnya adalah sekali Anda menjadi seorang ahli menggunakan satu metodologi, 5 antarmuka / versi baru saja dirilis. Kami telah melihat shader naik setiap 3 bulan, tampaknya. Jadi pilihlah yang memiliki dokumentasi terbaik (umumnya primitif), buat beberapa program, dan secara bertahap maju karena kemungkinan besar Anda akan bertemu dengan kode yang lebih lama di masa depan. Semoga ini bisa membantu!
sumber
Seperti biasa cara terbaik untuk belajar adalah melakukannya. Saya akan menunda pengeluaran uang kecuali Anda merasa mendapat manfaat dari memiliki buku teks untuk dibaca, sebagian besar (jika tidak semua) informasi dapat ditemukan online. Di atas mempelajari OpenGL Anda mungkin ingin memoles Aljabar Linier Anda juga, tidak pernah sakit.
Masalah besar yang saya hadapi adalah banyak hal yang di luar sana telah terdefinisi dalam OpenGL versi terbaru.
Sumber daya terbaik yang dapat saya temukan adalah di Joe's Blog . Yang terbaik adalah memperkenalkan saluran pipa modern dan membawa Anda melalui beberapa contoh dengan cara yang lebih mudah dibaca daripada apa yang saya dapat temukan di tempat lain. Tampaknya Nehe telah mendapatkan pasangan yang diperbarui baru-baru ini dan sementara pelajaran mereka masih lama, beberapa berita mungkin menarik. Lazy Foo ' juga merupakan sumber yang bagus, tetapi seperti Nehe, tutorialnya menggunakan materi yang dibatasi.
Saya pikir setelah akhir pekan atau 2, setelah Anda merasa nyaman pergi dan melakukan proyek kecil untuk menerapkan semuanya. Breakout, atau tetris - sesuatu di mana Anda dapat berkonsentrasi pada kode itu sendiri. Anda belajar lebih banyak ketika Anda pergi dan mencoba melakukan proyek yang sebenarnya, terlepas dari seberapa sederhana.
sumber
Ini satu lagi. Ini sangat bagus. Padahal hanya memiliki 4 bab.
http://openglbook.com/
Satu lagi adalah, http://www.arcsynthesis.org/gltut/ . Yang ini besar, lambat, dan profil tinggi.
Jangan lupa untuk melacak http://www.opengl.org/wiki/Getting_started
sumber
Cara terbaik untuk belajar OpenGL adalah menggunakannya. Saya akan merekomendasikan menulis mesin Anda sendiri. Ini mungkin tampak seperti tugas yang menakutkan, dan memang begitu. Mesin pertama Anda tidak akan terlalu bagus, tetapi Anda akan belajar banyak.
Pada dasarnya: tulis mesin, gunakan untuk permainan, cari tahu apa yang tidak Anda sukai dan tulis ulang. Terus lakukan itu dan Anda akan menjadi lebih baik di OpenGL. :)
Apa yang Anda butuhkan:
Ini sudah banyak pekerjaan.
sumber
Saya belajar OpenGL dengan menulis game "sederhana": 3D Tetris !
Coba buat game / aplikasi sederhana Anda sendiri:
Lakukan sesuatu yang sederhana yang menarik minat Anda!
sumber
Kami melakukan beberapa OpenGL (ES) di game Orchard's Craps kami untuk iPhone tetapi ditangani oleh seorang programmer dengan skillz gila 3D. Jadi, karena ini saya telah belajar OpenGL (ES) sehingga saya tahu apa yang saya bicarakan dan supaya saya bisa membuat kode bersama dengan tim.
Satu situs yang saya temukan bermanfaat, dengan serangkaian tutorial, adalah blog Jeff LaMarche: http://iphonedevelopment.blogspot.com dan di sini ada tautan untuk posting OpenGL-nya: http://iphonedevelopment.blogspot.com/2009/05/ opengl-es-from-ground-up-table-of.html
Dan dari OpenGL.org ada dua tautan yang berguna: http://www.opengl.org/code/ dan http://www.opengl.org/resources/features/
Cara terbaik, dinyatakan di atas beberapa kali. Lompat masuk dan lakukan sesuatu yang kecil, itu menarik, dan lanjutkan perjalanan Anda. Ini semua tentang memahami adegan, kamera dan material (shader). Setelah Anda memahami konsep-konsep ini, Anda dapat mulai melihat mesin fisika, deteksi tabrakan, efek partikel dan sejenisnya. Woot! (^_^)
Semoga beruntung dengan semua usahamu, Kevin
sumber
Yah tidak ada yang berbicara tentang Panduan Pemrograman OpenGL , saya tidak memiliki edisi khusus ini tetapi yang lebih tua cukup bagus.
sumber
Saya tidak akan mengatakan seri tutorial video ini adalah cara terbaik, tetapi dijelaskan dengan sangat baik: www.71squared.com/2009/03/iphone-game-game-programming-tutorial-1
sumber
http://www.opengl-tutorial.org/
Memiliki tutorial untuk OpenGL 'modern' (3.0 / 4.0 core, mis. Tidak ada barang usang (seperti glBegin / glEnd) yang diajarkan). Meskipun tutorial menggunakan shader, dasar-dasarnya dijelaskan dengan sangat rinci, membangun fondasi matematika yang solid di sepanjang jalan. Teks ini dibulatkan dengan baik dengan sampel kode * dan visualisasi yang membantu.
Tutorial menengah mencakup hal-hal seperti misalnya penggunaan Quaternions atau Lightmaps .
. * glm digunakan sebagai perpustakaan matematika
sumber
Perhatikan saja cara terbaik untuk belajar OpenGL berorientasi tugas . Cobalah untuk melakukan sesuatu (seperti menambahkan fitur ke gim Anda) lalu cari apa yang diperlukan untuk melakukannya .
Manual dan tutorial benar-benar membosankan tanpa konteks yang lebih besar - yaitu sesuatu di luar tutorial yang ingin Anda capai sendiri.
sumber
Mulailah dengan NeHe untuk dengan cepat mendapatkan segitiga pertama di layar. Lakukan beberapa tutorial pemula di sana untuk memahami konsep dasar pemrograman 3D. Jika, seperti yang Anda maksudkan, menyebutkan OpenGL ES, Anda sudah mengetahui dasar-dasar pemrograman 3D (apa itu matriks, untuk apa mereka digunakan, bagaimana berbagai matriks digunakan untuk memproyeksikan simpul pada layar, simpul apa, dll.), maka saya sarankan Anda jangan buang waktu dengan NeHe sama sekali, karena mungkin memperlambat Anda (dengan mengajarkan Anda hal-hal yang Anda harus "lepaskan" nanti).
Selain itu, saya setuju bahwa cara terbaik untuk mempelajarinya adalah dengan melakukan. Proyek non-hello-world pertama yang bagus mungkin adalah game 2D (atau mesin game 2D). Menggunakan OpenGL modern untuk aplikasi 2D dapat mengajarkan Anda banyak konsep yang relevan (penggunaan buffer dan shader, misalnya), dan itu akan kurang menakutkan daripada proyek 3D. Kemudian, setelah itu, Anda dapat menerapkan apa yang telah Anda pelajari dalam melakukan aplikasi 3D.
sumber
Yah saya telah diberitahu berulang kali bahwa tutorial nehe adalah yang terbaik, saya kira mereka juga cocok untuk Anda! http://nehe.gamedev.net/ Saya membeli buku merah ...
sumber