Saat ini saya akan kuliah untuk ilmu komputer. Meskipun saya berencana untuk menggunakan mesin yang ada di beberapa titik untuk membuat game kecil, tujuan saya saat ini adalah mempelajari dasar-dasarnya: yaitu pemrograman 3D. Saya sudah melakukan beberapa penelitian mengenai pilihan antara DirectX dan OpenGL, dan sentimen umum yang muncul adalah bahwa apakah Anda memilih OpenGL atau DirectX sebagai platform roda pelatihan Anda, banyak pengetahuan dapat ditransfer ke platform lain. . Karena itu, karena OpenGL didukung oleh lebih banyak sistem (mungkin alasan konyol untuk memilih apa yang harus dipelajari), saya memutuskan bahwa saya akan belajar OpenGL terlebih dahulu.
Setelah saya membuat keputusan untuk mempelajari OpenGL, saya melakukan penelitian lebih lanjut dan menemukan tentang dikotomi yang entah bagaimana tidak saya ketahui selama ini: fungsi tetap OpenGL vs OpenGL modern berbasis shader yang dapat diprogram. Pada awalnya, saya pikir itu adalah pilihan yang jelas bahwa saya harus memilih untuk belajar OpenGL berbasis shader karena itulah yang paling umum digunakan dalam industri saat ini. Namun, saya kemudian menemukan Pemrograman Grafis 3D Pembelajaran Modern yang sangat populer oleh Jason L. McKesson, yang berlokasi di sini: http://www.arcsynthesis.org/gltut/
Saya membaca bagian-bagian pengantar, dan di bagian "Tentang Buku Ini", penulis menyatakan:
"Pertama, banyak hal yang dipelajari dengan pendekatan ini harus ditinggalkan ketika pengguna menemukan masalah grafis yang harus diselesaikan dengan kemampuan program. Kemampuan program menghapus hampir semua pipa fungsi tetap, sehingga pengetahuan tidak mudah ditransfer."
namun pada saat yang sama juga membuat kasus bahwa fungsi-tetap menyediakan kurva belajar yang lebih mudah dan lebih langsung untuk pemula dengan menyatakan:
"Secara umum dianggap paling mudah untuk mengajar pemrogram grafis orang baru menggunakan pipa fungsi tetap."
Secara alami, Anda dapat melihat mengapa saya mungkin berkonflik tentang paradigma mana yang harus dipelajari: Apakah saya menghabiskan banyak waktu untuk belajar (dan kemudian tidak mempelajari) cara-cara memperbaiki fungsi, atau apakah saya memilih untuk memulai dengan shader? Perhatian utama saya adalah bahwa shader modern yang dapat diprogram, entah bagaimana, membutuhkan programmer untuk sudah memahami pipeline fungsi tetap, tapi saya ragu itulah masalahnya.
TL; DR = Sebagai seorang programmer grafis yang bercita-cita tinggi, apakah saya tertarik mempelajari pemrograman 3D melalui fungsi tetap atau pemrograman berbasis shader modern?
sumber
Jawaban:
Saya tidak membeli argumen bahwa lebih mudah untuk memulai dengan hal-hal fungsi tetap. Mungkin saja fungsi tetap memungkinkan Anda melakukan hal-hal tertentu dengan kode lebih sedikit - dalam OpenGL fungsi tetap, misalnya, Anda bisa mendapatkan pencahayaan / bayangan yang sangat mendasar dengan melakukan
glEnable(GL_LIGHTING)
dan beberapa panggilan lainnya. Masalahnya adalah segera setelah Anda menginginkan sesuatu yang sedikit berbeda - pencahayaan per-pixel, katakanlah, alih-alih pencahayaan per-vertex - Anda harus meninggalkan hal-hal fungsi-tetap sepenuhnya dan menulis shader untuk mengimplementasikan kedua fungsi tetap apa pun yang Anda gunakan sebelumnya, ditambah apa pun yang ingin Anda ubah.Sepertinya itu akan lebih sederhana dan kurang membingungkan untuk menggunakan shader sepanjang waktu. Shader memang membutuhkan sedikit lebih banyak pekerjaan pengaturan karena Anda memiliki file sumber terpisah yang perlu dimuat dan dikompilasi, beberapa panggilan C tambahan untuk mencari dan mengatur parameter, dll. Namun begitu Anda mendapatkan shader, itu adalah hal termudah. untuk mengkode beberapa efek yang berbeda, cobalah ide-ide yang berbeda, dll. Dan Anda tidak perlu peduli di mana batas-batas sistem fungsi tetap dan apakah itu dapat atau tidak dapat melakukan apa yang Anda inginkan; shader dapat melakukan apa pun yang Anda bisa menulis kode, modulo batas kinerja dan memori yang biasa.
sumber
Saya akan mengatakan untuk memulai dengan fungsi tetap pada GLUT. Saya tidak akan mengatakan banyak tentang ini, tetapi ide - ide di balik shader cukup rumit dan pengetahuan yang diperlukan adalah pemrograman 3d dasar (yaitu pembuatan vertex dan matriks transformasi dll). Ada lebih banyak tempat Anda dapat mengacaukan menggunakan shader, ada banyak lagi yang bisa dikodekan.
Lihat tutorial saya , dan ini lighthouse3d yang
sumber
Saya kedua lurus untuk shader. Ini tidak benar-benar yang jauh lebih sulit untuk mengatur, dan ketika Anda melewati rintangan pertama Anda memiliki kekuatan penuh di ujung jari Anda.
Lebih penting lagi, Anda akan menemukan bahwa pemrograman shader lebih cocok dengan persamaan matematika yang Anda lihat dalam buku dan kuliah grafik di perguruan tinggi.
sumber
Saya akan menyarankan menggunakan pipa fungsi tetap sebagai tulang punggung program Anda. Saya merasa lebih mudah untuk memiliki sesuatu yang muncul menggunakannya bukan murni shader. Kemudian, ketika Anda tahu Anda belum mengacaukan simpul atau normals Anda, Anda dapat perlahan-lahan tapi pasti masuk ke dunia teduh.
sumber