Apakah belajar OpenGL 2.1 tidak berguna hari ini?

44

Saya baru mengenal dunia 3D OpenGL / DirectX dan saya mengetahui bahwa spesifikasi OpenGL 4.1 dan GLSL baru saja dirilis hari ini.

Seorang teman saya memberi saya Buku Merah untuk OGL v2.1 tetapi, sejauh yang saya baca, 3.x dan 4.x sangat berbeda dari 2.x dan banyak hal sudah tidak digunakan lagi sekarang.

Dapatkah saya menggunakan buku ini untuk mulai mempelajari dasar-dasar 3D dan CG atau lebih baik menemukan salinan yang lebih baru?

reefaktor
sumber
10
Saya tidak tahu banyak tentang OpenGL / DirectX, tapi saya menikmati bermain game di mesin yang berumur lebih dari setahun. Saya membayangkan pengetahuan Anda tentang OpenGL 3.x akan bermanfaat bagi kebiasaan bermain saya. Hanya pemikiran saja.
Simurr
Saya tidak suka cara pertanyaan ini diungkapkan. Bisakah Anda membuat game di OpenGL 2.1 ? Jawabannya: Ya pasti . Apa maksudmu dengan tidak berguna saat itu? Bisakah Anda mempelajari dasar-dasar 3D dari buku yang lebih lama atau API yang sudah ketinggalan zaman? Sekali lagi ya pasti . Apakah ini cara terbaik-terbaik-bessssssst untuk melakukannya? Mungkin tidak .
bobobobo

Jawaban:

18

Di saat-saat seperti ini saya selalu menuju ke Survei Perangkat Keras Steam: http://store.steampowered.com/hwsurvey/ - Anda akan melihat bahwa penetrasi pasar sistem kelas DX10 / 11 hampir mencapai 80%; ini secara umum setara dengan GL3.3 atau lebih tinggi. 80% ini terbatas untuk pengguna Vista / 7 - tambahkan GPU DX10 / 11 dengan XP dan Anda naik menjadi lebih dari 90%.

Ingatlah bahwa kita berbicara tentang lebih banyak pemain hardcore di sini, Anda kemudian harus mulai memikirkan audiens target Anda. Apakah ini orang yang ingin Anda targetkan? Apakah Anda membidik mereka yang memiliki perangkat keras downlevel lebih banyak? Bagaimana dengan grafis Intel? Bagaimana dengan pengguna Mac dan Linux? Ini semua adalah pertanyaan yang perlu Anda jawab sendiri, jadi pedoman umum yang umum adalah yang terbaik yang akan Anda dapatkan.

Selain itu, Anda perlu mempertimbangkan fakta bahwa jika Anda mulai belajar hari ini dengan maksud mengirimkan sesuatu, Anda sedang melihat periode minimum satu tahun sebelum Anda tiba di sana (kecuali jika kita sedang berbicara tentang kasus yang benar-benar sepele / sederhana). Dengan tren peningkatan kemampuan gfx yang terus berlanjut, kami sedang mendekati mendekati 100% penyerapan perangkat keras GL3.3 + saat itu.

Kemudian faktor dalam hal itu dengan GL2.1 atau lebih rendah Anda akan belajar dan menggunakan banyak omong kosong tua yang kasar, bahkan jika Anda membatasi diri Anda pada shader dan VBO subset dari GL2.1 (versi GLSL downlevel tidak menyenangkan untuk digunakan , dan streaming VBO semuanya tidak dapat digunakan tanpa GL_ARB_map_buffer_range) - GL3.3 + telah memperkenalkan cara yang jauh lebih baik (dan lebih banyak performan) dalam menangani banyak hal, Anda akan menggunakan perangkat keras pemain dengan lebih baik (dan mereka akan berterima kasih kepada Anda untuk itu) dan Anda akan menghabiskan lebih banyak waktu menulis kode produktif daripada melawan API yang benar-benar tidak ingin bekerja sama dengan Anda.

Dan tentu saja ada situasi pengemudi yang ditakuti. Fakta yang sulit tetapi sebenarnya adalah bahwa driver GL pada Windows berada dalam keadaan menyesal - NV mendukung hal-hal yang tidak seharusnya, AMD tidak mendukung hal-hal yang seharusnya, dan dengan Intel Anda benar-benar perlu membatasi diri Anda pada fungsi GL yang ada setara di D3D. Semakin baru GL_VERSION, semakin besar kemungkinan Anda akan menemukan bug driver, tetapi untuk GL3.3 segalanya cukup stabil sekarang.

Jadi rangkumannya adalah, dengan tidak adanya info lain (audiens target, dll), saya menargetkan GL3.3 sebagai garis dasar (mungkin menarik fungsionalitas dari GL_VERSIONs yang lebih tinggi di mana tersedia dan di mana itu tidak mengganggu basis kode terlalu banyak) kecuali ada alasan yang sangat spesifik dan teridentifikasi secara definitif untuk menjadi lebih rendah (dan saya ingin benar-benar 100% yakin akan hal itu daripada menggunakan gagasan yang samar tentang " tetapi bagaimana dengan mereka yang memiliki perangkat keras yang lebih tua "). Dalam kasus terakhir saya tidak akan pergi di bawah GL2.1, dan saya akan mencari untuk menarik sebanyak mungkin fungsi 3.x bahkan saat itu.

Maximus Minimus
sumber
Poin bagus pada GL3.3 ~ = DX10 / 11 dan statistik perangkat keras Steam.
Nate
Hanya untuk memperbarui statistik ini - DX10 / 11 GPU + Vista / 7 sekarang di ~ 88%, tambahkan 4,38% untuk DX10 / 11 GPU + XP dan Anda sedang melihat penetrasi 90% yang cukup nyaman. Penyerapan meningkat jauh lebih cepat daripada yang saya perkirakan ketika saya membuat posting asli.
Maximus Minimus
"GL3.3 + telah memperkenalkan banyak cara yang lebih baik (dan lebih banyak performan) dalam menangani banyak hal" - Bagaimana perbandingan 3,2 tarif? Pengguna Mac belum mendapatkan 3,3. Saya berasumsi hampir sama, tetapi tidak ingin terlalu banyak berasumsi.
michael.bartnett
38

Saya akan menyarankan menempel dengan persimpangan 2,1 dan 3. Masih banyak perangkat keras dan driver yang hanya mendukung OpenGL 2.1, tetapi praktik didorong oleh OpenGL 3 inti yang lebih baik. Tutorial ini adalah tempat yang cukup baik untuk memulai (mengajarkan OpenGL 2.0 tanpa fitur yang sudah usang dalam 3).

Jake McArthur
sumber
3
+1 untuk tutorial Joe Groff. Dia membawa Anda melalui seluruh pipa di Bab 2. Dan setiap kode "utilitas" yang ditambahkannya hanya dua fungsi: satu untuk membaca dalam file (untuk GLSL) dan satu untuk membaca gambar TGA (dan Anda bisa menggunakan yang lain juga pustaka gambar atau tulis pemuat gambar Anda sendiri setelah contohnya berfungsi). Segala sesuatu yang lain dijelaskan dan bagian dari tutorial.
michael.bartnett
18

Saya akan mengatakan itu tidak berguna.

Mengapa? Nah, sementara seluruh dunia mendukung OpenGL 3.x dan 4.0, Mac OS X masih hanya mendukung OpenGL 2.1. Dan, OpenGL ES, yang digunakan pada sebagian besar, jika tidak semua, platform portabel, masih banyak didukung di semua versi: 1.0, 1.1, dan 2.0; yang kira-kira sebanding dengan OpenGL 1.4, 1.5, dan 2.1, masing-masing.

Jadi sampai OpenGL ES 1.0 menghilang sepenuhnya dari muka bumi, mengetahui OpenGL 2.x tidak akan sia-sia.

Itu tidak berarti tidak ada nilai dalam menggunakan OpenGL 3.x atau 4.0 pada platform yang mendukungnya, tentu saja.

Pembaruan: Pada rilis Mac OS X Lion (10.7), profil OpenGL 3.2 Core sekarang didukung pada Mac. Rilis ini mencela sebagian besar OpenGL 1.x untuk menyederhanakan API. Pengguna OS X versi lama (dan grafis Intel kelas bawah) masih terbatas pada OpenGL 2.0 dan 2.1. Mengetahui OpenGL 2.x masih berguna, dan akan tetap demikian untuk beberapa waktu.

greyfade
sumber
Snow Leopard memang mendukung sebagian besar ekstensi OpenGL 3 - bahkan pelindung geometri.
Axel Gneiting
@Alex Mendukung ekstensi "paling" tidak berarti inti GL3 didukung. Dan kita hanya berbicara tentang 3.x
Matias Valdenegro
@Axel Gneiting: Hanya saja tidak sama. Sebagian besar fitur menarik OpenGL 3.0+ tidak tersedia sebagai ekstensi. Ada sejumlah besar perubahan inti.
greyfade
12

Jawaban mh01 mencakup sebagian besar dasar-dasarnya, jadi saya akan menambahkan beberapa pendukung.

OpenGL ES

Mari kita bicara tentang ES 2.0 vs. desktop GL 2.1 vs. desktop GL 3.3. Untuk tujuan diskusi ini, istilah "GL XY" akan merujuk ke desktop OpenGL versi XY, sedangkan "ES XY" akan merujuk ke OpenGL ES XY

Secara struktural , ES 2.0 memiliki lebih banyak kesamaan dengan core GL 3.3 dibandingkan dengan GL 2.1. GL 3.3 dan ES 2.0 keduanya berbasis shader murni. Keduanya berbasis objek buffer murni. Dll. GL 2.1 memiliki banyak perangkap kinerja dan kode yang akan membuatnya mudah untuk menulis aplikasi GL 2.1 yang tidak mudah dibawa-bawa portabel ke ES 2.0.

Namun, dalam hal sintaks bahasa shading , GLSL ES 1.00 (pemetaan ke ES 2.0) jauh lebih mirip GL 2.1 GLSL daripada GL 3.3. Kata kunci attributedan varyingtidak ada di 3,3 inti; menggunakan indan out, yang jauh lebih konsisten dan masuk akal ketika Anda berurusan dengan lebih dari 2 tahap shader (itulah sebabnya ES 3.0 mengadopsi sintaks GL 3.3).

Sangat mudah untuk memetakan konsep - konsep yang dipelajari dalam GL 3.3 hingga ES 2.0. Jadi, jika Anda mempelajari GL 3.3 untuk berbagai alat untuk melakukannya, Anda akan mengerti cara bekerja di dunia ES 2.0. Anda harus mencari tahu di mana subset berada, tentu saja (yaitu: hal-hal yang tidak dapat dilakukan oleh GL 3.3 yang tidak dapat dilakukan ES 2.0), tetapi konsep-konsepnya sama.

Memetakan sintaks GLSL, sehingga Anda dapat menyalin shader dari satu ke yang lain, sedikit lebih sulit. Tapi sungguh, yang diperlukan hanyalah beberapa definisi di tempat yang tepat. Juga, GLSL 3.30 memiliki beberapa fitur kompatibilitas ES, seperti highpdan sebagainya (yang tidak melakukan apa-apa di desktop GLSL).

Jadi, Anda mendapatkan sesuatu untuk ES 2.0 saat belajar dari GL 3.3 bukannya GL 2.1.

Nicol Bolas
sumber
8

Untuk gim yang tidak membutuhkan perubahan yang lebih besar untuk OpenGL hanya terpapar di versi yang lebih baru, hanya menggunakan 3.x + membatasi Anda ke seri nvidia 8 dan ke atas (tidak yakin pada vendor grafis lain yang Anda ingin melihat itu). Jadi, jika Anda tidak menggunakan fitur 3.x +, Anda hanya membuat batas artifisial, menghentikan orang dengan kartu grafis yang lebih tua, tetapi lebih kuat dari memainkan game Anda.

Untuk alasan ini, saya sangat merekomendasikan mempelajari subset maju yang kompatibel, dan versi yang lebih baru, lalu memilih versi terendah yang dapat mendorong permainan Anda secara efektif. Kamu bisa

Saya juga akan mencatat dalam menanggapi pertanyaan lain bahwa OpenGL: ES 2.0 menghapus pipa fungsi tetap, jadi itu lebih setara dengan 3.0 dari 2.1. Juga selalu mendukung fitur yang berbeda per versi gl yang didukung saat runtime.

Jsimmons
sumber
4

Saya akan mengatakan itu aman untuk mempelajari OpenGL menggunakan Buku Merah Anda, abaikan saja hal-hal yang sudah usang dalam versi yang lebih baru (seperti glBegin (), glEnd () - gunakan VBO sebagai gantinya). Sebagian besar fungsi dalam versi yang lebih baru sudah tersedia sebelum melalui ekstensi.

thbusch
sumber
4

Saya sebagian besar setuju dengan thbusch. Tapi saya tidak akan sepenuhnya mengabaikan API yang sudah usang: ada terlalu banyak kode di luar sana yang menggunakannya. Saya akan membayar mereka jauh lebih sedikit perhatian. Tidak ada gunanya, misalnya, dalam belajar glBegin (), glEnd () cukup menyeluruh untuk menulis kode Anda sendiri menggunakannya. Tetapi Anda harus mengenali mereka ketika Anda melihatnya, dan memiliki beberapa gagasan tentang apa yang mereka lakukan.

Masih perlu membaca seluruh Buku Merah setidaknya sekali, bahkan jika Anda tidak membuat kode sampel dan melakukan latihan yang mencakup fitur-fitur yang dihentikan pada OpenGL 3.x.

pengguna1800
sumber
3

Jawaban singkatnya:

Tidak. Mempelajari OpenGL 2.1 adalah ide yang bagus, bahkan hari ini, selama Anda mempelajari "bagian-bagian yang baik".

Jawaban Panjang:

OpenGL pada dasarnya dapat dibagi dalam dua bagian: "Bagian yang baik" dan "Fungsi warisan".

Jujur, saya tidak melihat banyak manfaat dalam mempelajari fungsi warisan ("fungsi tetap"). Namun, sebagian besar OpenGL 2.1 (bagian yang baik) masih tersedia saat ini dengan perubahan yang relatif kecil.

Dengan demikian, mempelajari beberapa bagian OpenGL 2.1 dapat bermanfaat. Secara khusus, OpenGL ES 2 sangat populer akhir-akhir ini, dan ES 2 sebagian besar (tetapi tidak persis) merupakan bagian dari OpenGL 2.1. Untuk pemrograman 3D di telepon pintar, OpenGL ES 2 adalah suatu keharusan.

Jadi apa yang "baik"? Pada dasarnya apa pun yang ada di OpenGL 3.x "profil inti" (sebagai lawan dari "profil kompatibilitas") dan / atau di OpenGL ES 2.

  • Vertex dan Shader fragmen: Pelajari mereka
  • Tekstur: Masih bagus.
  • Matriks: Mengetahui cara kerjanya bermanfaat, tetapi glLoadIdentityfungsi semacam itu sudah usang dan harus dihindari
  • Cahaya: Mengetahui bagaimana cahaya dapat disimulasikan dalam grafik komputer berguna, tetapi glLightfvdan fungsi lampu fungsi tetap lainnya harus dihindari.
  • Array buffer: Bagus
  • glBegin, glVertex, glColor, glEnd: Hindari mereka. Mungkin baik untuk eksperimen cepat, tetapi ada cara lain yang lebih baik untuk melakukan hal yang sama.
  • Daftar tampilan: Hindari

Pertanyaan tempat saya mengeposkan jawaban ini ternyata merupakan duplikat, jadi saya memposting ulang di sini.

luiscubal
sumber
1

Saya tidak percaya itu ide yang buruk. Banyak konsep GL mencakup semua versi OpenGL dan pada akhirnya akan tetap membantu Anda. Saya memiliki sejumlah buku OpenGL dari 10 tahun yang lalu yang masih membantu hari ini. Saya akan mengatakan bahwa jika Anda baru di OpenGL dan ada beberapa buku yang lebih baik yang lebih tua, Anda akan belajar banyak dan kodenya harus tetap berfungsi. Sebagian besar OpenGL kompatibel ke belakang (saya percaya).

Mungoid
sumber
1

Saya menyarankan agar Anda mempelajari hal-hal modern terlebih dahulu dan hanya berpura-pura bahwa barang warisan tidak ada sampai Anda membutuhkannya.

Hal-hal yang kedaluwarsa dapat berguna dalam beberapa kasus misalnya jika Anda mencoba memprogram untuk sesuatu yang hanya mendukung OpenGL 1.5 atau lebih tua (dapat ditemukan pada netbook jelek dan sistem MacOS lama), OpenGL ES 1.x (iPhone lama dan Android sebelum 1.6), atau OpenGL SC (Subset Kritis Saftey jika Anda memprogram tampilan pada jet fighter). Minecraft misalnya dibangun terhadap OpenGL 1.3 sehingga dapat mendukung perangkat keras yang sangat lama (tetapi bahkan yang memiliki opsi 'lanjutan').

Ini juga bisa berguna jika Anda hanya ingin mendapatkan piksel pada layar dan tidak peduli melakukannya dengan cara yang benar.

Berguna untuk mengandalkan beberapa fitur yang dilakukan OpenGL secara default saat mempelajari seperti menyiapkan viewport -1.0 hingga 1.0 dan rendering tanpa shader. Ini memungkinkan Anda untuk belajar tanpa harus melakukan semuanya dalam satu waktu.

Tapi selain itu harus dilewati jika memungkinkan.

Saya sarankan Anda memeriksa jawaban saya di sini dan di sini untuk informasi lebih lanjut.

David C. Bishop
sumber