Versi OpenGL apa yang harus dipelajari dan / atau digunakan?

16

Jadi, saya baru di OpenGL ... Saya memiliki pengetahuan umum tentang pemrograman game tetapi hanya memiliki sedikit pengalaman praktis.

Saya telah melihat berbagai artikel dan buku dan mencoba masuk ke OpenGL, tetapi saya telah menemukan berbagai versi dan cara lama vs baru dalam melakukan sesuatu yang membingungkan.

Saya kira pertanyaan pertama saya adalah apakah ada yang tahu beberapa angka tentang persentase gamer yang dapat menjalankan setiap versi OpenGL. Seperti apa pangsa pasarnya? 2.x, 3.x, 4.x ...

Saya melihat persyaratan untuk Half Life 2 karena saya tahu Valve memperbaruinya dengan OpenGL untuk berjalan di Mac dan saya tahu mereka biasanya mencoba untuk mencapai basis pengguna yang sangat luas, dan mereka mengatakan minimum GeForce 8 Series. Saya melihat 8800 GT di situs web Nvidia dan terdaftar dukungan untuk OpenGL 2.1. Yang, mungkin saya salah, kedengarannya kuno bagi saya karena sudah ada 4.x. Saya mencari driver untuk 8800GT dan katanya mendukung 4.2! Sedikit perbedaan, lol.

Saya juga membaca hal-hal seperti XP hanya mendukung hingga versi tertentu, atau OS X hanya mendukung 3.2, atau semua hal lainnya. Secara keseluruhan, saya hanya bingung berapa banyak dukungan yang ada untuk berbagai versi dan versi apa yang harus dipelajari / digunakan.

Saya juga mencari sumber belajar. Hasil pencarian saya sejauh ini telah mengarahkan saya ke OpenGL SuperBible. Edisi ke-4 memiliki ulasan hebat di Amazon, tetapi mengajarkan 2.1. Edisi ke-5 mengajarkan 3.3 dan ada beberapa hal dalam ulasan yang menyebutkan bahwa edisi ke-4 lebih baik dan bahwa edisi ke-5 tidak mengajarkan fitur-fitur baru dengan benar? Pada dasarnya, bahkan dalam materi pembelajaran saya melihat perbedaan dan saya bahkan tidak tahu harus mulai dari mana.

Dari apa yang saya mengerti, 3.x memulai cara baru dalam melakukan sesuatu dan saya telah membaca dari berbagai artikel dan ulasan yang ingin Anda "jauhi fitur-fitur usang seperti glBegin (), glEnd ()" namun banyak buku dan tutorial yang saya lihat menggunakan metode itu. Saya pernah melihat orang mengatakan bahwa, pada dasarnya, cara baru dalam melakukan sesuatu lebih rumit namun cara lama> buruk.>

Hanya catatan tambahan, secara pribadi, saya tahu saya masih harus banyak belajar sebelumnya, tetapi saya tertarik pada penghentian; jadi saya kira faktor-faktor itu juga, karena, sejauh yang saya mengerti itu hanya dalam 4.x?

[hanya btw, desktop saya mendukung 4.2]

Kenmore
sumber
Pertanyaan ini (tentang Stack Overflow) tampaknya merupakan duplikat: stackoverflow.com/questions/6823371/…
Anderson Green

Jawaban:

21

Jika Anda bertanya-tanya tentang cakupan OpenGL, tempat yang baik untuk memulai adalah Steam Hardware Survey.

http://store.steampowered.com/hwsurvey?platform=pc

Sayangnya, tampaknya rusak sekarang dan tidak menampilkan statistik untuk kartu video. : \

Saya juga membaca hal-hal seperti XP hanya mendukung hingga versi tertentu

DirectX 9 dapat dibandingkan dengan OpenGL 2.1, DirectX 10 ke OpenGL 3.0 dan DirectX 11 ke OpenGL 4.0. Di sinilah asal mula kebingungan.

XP mendukung semua versi OpenGL, tetapi tidak mendukung DirectX 10 atau lebih tinggi. Ini adalah bagaimana Microsoft ingin memaksa orang untuk meningkatkan ke Vista, tetapi tidak berhasil dengan baik. OpenGL adalah standar terbuka, sehingga selama produsen kartu video bersedia untuk menghasilkan driver untuk XP, itu akan mendukung versi OpenGL yang lebih baru.

Dari apa yang saya mengerti, 3.x memulai cara baru dalam melakukan sesuatu dan saya telah membaca dari berbagai artikel dan ulasan yang ingin Anda "jauhi fitur-fitur usang seperti glBegin (), glEnd ()" namun banyak buku dan tutorial yang saya lihat menggunakan metode itu. Saya pernah melihat orang mengatakan bahwa, pada dasarnya, cara baru dalam melakukan sesuatu lebih rumit namun cara lama> buruk.>

Ini adalah masalah yang sangat besar untuk OpenGL. Pada dasarnya, di masa lalu, Anda akan mengirim barang ke kartu video dengan menggunakan "mode langsung". Mulailah dengan glBegin, lakukan beberapa hal, akhiri dengan glEnd. Namun, driver kartu video tidak menyukai ini sama sekali . Bagaimana mereka bisa tahu berapa banyak barang yang akan Anda kirim? Apakah akan menjadi 4 simpul untuk quad bertekstur atau 100.000 untuk model kulit? Inilah sebabnya mereka memperkenalkan objek vertex buffer (VBO). Sementara mode langsung adalah daftar tertaut, VBO adalah array statis. Pengembang tahu seberapa besar itu, pengemudi tahu seberapa besar itu. Semua orang senang. Jadi papan standar OpenGL (Khronos Group) memutuskan untuk menghentikan mode langsung untuk OpenGL 3.0 dan yang lebih tinggi. Namun, ini bermasalah, karena saya akan tunjukkan dengan contoh sederhana.

Katakanlah Anda ingin menampilkan quad bertekstur, mulai dari awal.

Di OpenGL 2.1:

  • Atur matriks proyeksi dan masukkan GL_PROJECTION.
  • Atur matriks modelview dan masukkan GL_MODELVIEW.
  • Muat gambar dan masukkan ke dalam GL_TEXTURE_2Dpegangan.
  • Tentukan posisi, koordinat tekstur dan warna untuk simpul Anda.
  • Ikat teksturnya.
  • glBegin... glVertex2f... glTexCoord2f... glEnd.

Di OpenGL 3.0:

  • Buat matriks untuk proyeksi dan modelview.
  • Muat gambar dan masukkan ke dalam GL_TEXTURE_2Dpegangan.
  • Tentukan posisi, koordinat tekstur dan warna untuk simpul Anda dan letakkan di VBO.
  • Buat objek array vertex (VAO) dan lampirkan VBO Anda.
  • Tulis shader untuk menampilkan quad bertekstur dan letakkan di program shader.
  • Pasang matriks ke program shader menggunakan seragam.
  • Ikat teksturnya.
  • Pasang tekstur ke program shader.
  • glDrawArrays.

Jadi apa yang salah di versi pertama?

  • Posisi Anda salah.
  • Belitan simpul Anda adalah arah yang salah.
  • Tekstur Anda tidak dimuat dengan benar.
  • Tekstur Anda tidak mengikat dengan benar.
  • Matriks proyeksi Anda salah.
  • Matriks modelview Anda salah.
  • Anda tidak mengirim simpul yang benar.

Dan di versi kedua, Anda dapat memiliki masalah dengan hal di atas dan :

  • VBO Anda salah.
  • VAO Anda salah.
  • Shader Anda salah.
  • Mengikat tekstur Anda ke shader salah.

Tanpa alat debug yang tepat, ini menjadi masalah serius. Inilah sebabnya mengapa orang mengatakan Anda harus tetap menggunakan mode langsung. Untungnya, kita sekarang memiliki gDEBugger yang gratis dan bagus sekarang, tetapi itu bukan peluru ajaib.

Untuk menjawab pertanyaan Anda: itu tergantung pada permainan Anda. Jika Anda ingin menjangkau khalayak luas (misalnya game kasual atau platformer 2D), Anda harus menargetkan 2.1. Jika Anda membuat game luar angkasa epik yang tidak akan berjalan pada perangkat keras berusia enam tahun, target 3.3. Dan jika Anda membutuhkan yang terbaru dan terbaik untuk kompatibilitas di masa depan, target 4.0.

knight666
sumber
2
Saya pikir Anda menunjukkan beberapa bias terhadap VAO / VBO di sini. Pada kenyataannya, jika Anda ingin menggambar quad bertekstur Anda akan memiliki set VAO / VBO lengkap, bersama dengan shader dan tekstur yang sudah dibuat (selama startup program - tidak ada yang membuat mereka saat runtime). Menggambar quad bertekstur melalui cara baru pada kenyataannya hanya segelintir panggilan - memang diakui di depan memuat kompleksitas pada program init sedangkan cara lama memperlihatkan kompleksitas saat runtime.
Maximus Minimus
2
Tapi itulah yang saya maksudkan: sekarang bug Anda mungkin ada di data Anda (data titik dan objek tekstur), program shader Anda, kode shader Anda, matriks Anda, unggahan seragam Anda, atau penjilidan VAO Anda. Jika Anda memulai dari nol , banyak sekali subsistem yang perlu diperiksa! Dan Anda harus melacak lebih banyak status.
knight666
1
Perhatikan bahwa gDEBugger dari situs gremedy sudah usang. Saya berasumsi ditinggalkan karena forum mereka telah lama mati. Alat ini telah diambil oleh AMD: gDEBugger .
MichaelHouse
2
"glBegin ... glVertex2f ... glTexCoord2f ... glEnd." Tidak, tidak. glBegin, glVertex dll tidak pernah benar. glDrawArrays diperkenalkan di OpenGL 1.1 (1997) dan harus selalu digunakan pada glBegin dan End.
API-Beast
9

Untuk beberapa statistik tentang kompatibilitas perangkat keras, Anda dapat melihat survei Steam: http://store.steampowered.com/hwsurvey/ Meskipun mencantumkan DX10 dan DX11, kompatibilitas perangkat kerasnya sama dengan OpenGL 3 dan OpenGL 4. Meskipun perhatikan bahwa keadaan instalasi driver OpenGL pada orang biasanya lebih buruk daripada DX.

Windows XP tidak mendukung DX10 atau DX11, tetapi OpenGL 3 dan 4 harus baik-baik saja, asalkan drivernya ok. OSX mendukung OpenGL 3 (maksimal), di Linux Anda mendapatkan OpenGL 4 dengan driver vendor ATI / NVIDIA (tentu saja hanya jika perangkat keras mendukungnya).

Lalu ada juga versi ES seluler OpenGL. Sebenarnya saya sarankan melihat ke OpenGL ES 2.0, karena lebih kecil, jadi lebih mudah dipelajari, tetapi Anda juga perlu menggunakan praktik modern, yaitu shader dan VBO. Ini juga apa yang digunakan pada sebagian besar perangkat seluler (sehingga Anda dapat membuat game seluler) dan juga WebGL pada dasarnya sama, sehingga Anda benar-benar dapat melakukan semua pembelajaran di peramban web dengan keunggulan pengembangannya yang cepat. OpenGL ES 3.0 akan dirilis musim panas ini.

Tessellation adalah fitur OpenGL 4.0. Pertama-tama Anda harus mempelajari jenis-jenis shader lainnya, apalagi semua dasar-dasarnya, tetapi saya setuju itu menarik - sebenarnya saya telah menulis tes kecil dengannya: http://blog.tapiov.net/post/15189341463/playing- dengan-opengl-4-tessellation

Tapio
sumber
4
Sial, knight666 mengalahkan saya untuk itu, dengan jawaban yang lebih rinci. Namun, bagian ES layak dipikirkan.
Tapio