Hangi OpenGL sürümlerini öğrenmek ve / veya kullanmak?


16

Bu yüzden, OpenGL'de yeniyim ... Oyun programlama hakkında genel bilgiye sahibim ama çok az pratik deneyimim var.

Çeşitli makalelere ve kitaplara bakıyorum ve OpenGL'ye dalmaya çalışıyorum, ancak çeşitli versiyonları ve eski ve yeni şeyleri kafa karıştırıcı yapmanın yollarını buldum.

Sanırım ilk sorularım, OpenGL'nin her sürümünü çalıştırabilecek oyuncu yüzdeleri hakkında bazı rakamlar biliyor mu? Pazar payı nasıl? 2.x, 3.x, 4.x ...

Valve'in OpenGL ile Mac üzerinde çalışmasını güncellediğini bildiğim için Half Life 2'nin gereksinimlerine baktım ve genellikle çok geniş bir kullanıcı tabanına vurmaya çalıştıklarını biliyorum ve minimum GeForce 8 Serisi diyorlar. Nvidia'nın web sitesindeki 8800 GT'ye baktım ve OpenGL 2.1 desteğini listeledi. Belki de yanılıyorum, zaten 4.x olduğu için bana eski geliyor. 8800GT için bir sürücüye baktım ve 4.2'yi desteklediğini söylüyor! Biraz tutarsızlık var, lol.

XP'nin sadece belirli bir sürüme kadar desteklediğini veya OS X'in yalnızca 3.2'yi veya diğer her türlü şeyi desteklediğini de okudum. Genel olarak, çeşitli sürümler için ne kadar destek olduğu ve hangi sürümün öğrenileceği / kullanılacağı konusunda kafam karıştı.

Ayrıca öğrenme kaynakları da arıyorum. Arama sonuçlarım şimdiye kadar OpenGL SuperBible'ı işaret etti. 4. baskıda Amazon'da harika yorumlar var, ancak 2.1'i öğretiyor. 5. baskı 3.3 öğretiyor ve incelemelerde 4. baskının daha iyi olduğunu ve 5. baskının yeni özellikleri ya da bir şeyi düzgün bir şekilde öğretmediğini belirten birkaç şey var mı? Temel olarak, öğrenme materyallerinde bile tutarsızlıklar görüyorum ve nereden başlayacağımı bile bilmiyorum.

Anladığım kadarıyla, 3.x bir şeyler yapmanın yepyeni bir yolunu başlattı ve "glBegin (), glEnd ()" gibi kullanımdan kaldırılmış özelliklerden uzak durmak istediğiniz çeşitli makaleler ve incelemelerden okudum ve bu yöntemi kullandığım öğreticiler. İnsanların temelde yeni şeyler yapmanın daha karmaşık olduğunu, ancak eski yolun kötü olduğunu söylediğini gördüm.

Sadece bir yan not, kişisel olarak, önceden öğrenecek çok şeyim olduğunu biliyorum, ama mozaiklerle ilgileniyorum; bu yüzden bu faktörleri de hesaba katıyorum, çünkü anladığım kadarıyla bunun sadece 4.x?

[sadece btw, masaüstüm 4.2'yi destekliyor]


Bu soru (Yığın Taşması'nda) bir kopya gibi görünüyor: stackoverflow.com/questions/6823371/…
Anderson Green

Yanıtlar:


21

OpenGL kapsamını merak ediyorsanız, başlamak için iyi bir yer Steam Donanım Anketi'dir.

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

Ne yazık ki, şu anda bozuk gibi görünüyor ve video kartları için herhangi bir istatistik göstermiyor. : \

Ben de XP gibi belirli bir sürümü destekler gibi şeyler okudum

DirectX 9, OpenGL 2.1, DirectX 10 - OpenGL 3.0 ve DirectX 11 - OpenGL 4.0 ile karşılaştırılabilir. Karışıklık buradan kaynaklanıyor.

XP, tüm OpenGL sürümlerini destekler, ancak DirectX 10 veya üstünü desteklemez. Microsoft, insanları Vista'ya yükseltmeye zorlamak istedi, ancak çok iyi sonuç vermedi. OpenGL açık bir standarttır, bu nedenle video kartı üreticileri XP için sürücüler üretmeye istekli oldukları sürece, OpenGL'nin daha yeni sürümlerini destekleyecektir.

Anladığım kadarıyla, 3.x bir şeyler yapmanın yepyeni bir yolunu başlattı ve "glBegin (), glEnd ()" gibi kullanımdan kaldırılmış özelliklerden uzak durmak istediğiniz çeşitli makaleler ve incelemelerden okudum ve bu yöntemi kullandığım öğreticiler. İnsanların temelde yeni şeyler yapmanın daha karmaşık olduğunu, ancak eski yolun kötü olduğunu söylediğini gördüm.

Bu OpenGL için çok büyük bir problem. Temel olarak, eski günlerde, "anında mod" kullanarak video kartına bir şeyler gönderirsiniz. İle başlayın glBegin, bir şeyler yapın, ile bitirin glEnd. Ancak, video kartı sürücüleri değil böyle yapmak hiç . Ne kadar şey göndereceğinizi nasıl bilebilirler? Dokulu bir dörtlü için 4 köşe mi yoksa tenli bir model için 100.000 mi olacak? Bu nedenle köşe tamponu nesnelerini (VBO'lar) tanıttılar. Anında mod bağlantılı bir liste olsa da, VBO statik bir dizidir. Geliştirici ne kadar büyük olduğunu biliyor, sürücü ne kadar büyük olduğunu biliyor. Herkes mutlu. Bu nedenle OpenGL standartlar kurulu (Khronos Group), OpenGL 3.0 ve üstü için derhal moddan vazgeçmeye karar verdi. Ancak, basit bir örnekle göstereceğim gibi, bu sorunlu.

Diyelim ki sıfırdan başlayarak dokulu bir dörtlü görüntülemek istiyorsunuz.

OpenGL 2.1'de:

  • Yansıtma matrisini ayarlayın ve yerleştirin GL_PROJECTION.
  • Modelview matrisini ayarlayın ve yerleştirin GL_MODELVIEW.
  • Bir görüntü yükleyin ve bir GL_TEXTURE_2Dtutamağa koyun .
  • Köşeleriniz için konumları, doku koordinatlarını ve renkleri tanımlayın.
  • Dokuyu bağlayın.
  • glBegin... glVertex2f... glTexCoord2f... glEnd.

OpenGL 3.0'da:

  • Projeksiyon ve model görüntüleme için bir matris oluşturun.
  • Bir görüntü yükleyin ve bir GL_TEXTURE_2Dtutamağa koyun .
  • Köşeleriniz için konumları, doku koordinatlarını ve renkleri tanımlayın ve VBO'lara koyun.
  • Bir köşe dizisi nesnesi (VAO'lar) oluşturun ve VBO'larınızı ekleyin.
  • Dokulu bir dörtlü çıkarmak için bir gölgelendirici yazın ve gölgelendirici programına koyun.
  • Matrisleri üniforma kullanarak gölgelendirici programına takın.
  • Dokuyu bağlayın.
  • Dokuyu gölgelendirici programına ekleyin.
  • glDrawArrays.

Peki ilk versiyonda ne ters gidebilir?

  • Konumlarınız yanlış.
  • Köşe sargınız yanlış yöndedir.
  • Dokunuz düzgün yüklenmiyor.
  • Dokunuz düzgün bir şekilde bağlanmıyor.
  • Yansıtma matrisiniz yanlış.
  • Model görüntüleme matrisiniz yanlış.
  • Doğru köşeleri göndermiyorsunuz.

Ve ikinci versiyonda, yukarıdakilerle ilgili sorunlarınız olabilir ve :

  • VBO'larınız yanlış.
  • VAO'nuz yanlış.
  • Gölgelendiriciniz yanlış.
  • Gölgelendiriciye bağladığınız doku yanlış.

Uygun hata ayıklama araçları olmadan, bu ciddi bir sorun haline gelir. Bu yüzden insanlar acil moda geçmeniz gerektiğini söylüyor. Neyse ki, şimdi ücretsiz ve mükemmel gDEBugger var, ama bu sihirli bir mermi değil.

Sorunuzu cevaplamak için: Bu oyununuza bağlıdır. Geniş bir kitleye ulaşmak istiyorsanız (örneğin, sıradan bir oyun veya 2B platform oyunu), 2.1'i hedeflemelisiniz. Yine de altı yaşındaki bir donanımda çalışmayacak destansı bir uzay oyunu yapıyorsanız, 3.3'ü hedefleyin. Gelecekte uyumluluk için en son ve en büyüğüne ihtiyacınız varsa , 4.0'ı hedefleyin.


2
Sanırım burada VAO / VBO'ya karşı bir önyargı gösteriyorsunuz. Gerçekte, dokulu bir dörtlü çizmek isterseniz, zaten oluşturulmuş gölgelendiriciler ve dokularla birlikte tam bir VAO / VBO setiniz olacaktır (program başlatılırken - kimse bunları çalışma zamanında oluşturmaz). Yeni bir yolla dokulu bir dörtlü çizmek gerçekte sadece birkaç çağrıdır - kuşkusuz, program başlangıcındaki karmaşıklığı ön yüklerken, eski yol çalışma zamanında karmaşıklığı ortaya çıkarır.
Maximus Minimus

2
Ama tam olarak bunu kastettim: şimdi hatanız verilerinizde (tepe noktası verileri ve doku nesnesi), gölgelendirici programınız, gölgelendirici kodunuz, matrisleriniz, tek tip yüklemeniz veya VAO bağlantınızda olabilir. Hiçbir şeyden başlarsanız , kontrol edilmesi gereken çok sayıda alt sistem var! Ve çok daha fazla durumu takip etmeniz gerekiyor.
knight666

1
Gremedy sitesinden gDEBugger'ın güncel olmadığını unutmayın. Forumlarının uzun süredir kapalı olduğu için terk edildiğimi varsayıyorum. Araç AMD: gDEBugger tarafından alındı .
MichaelHouse

2
"glBegin ... glVertex2f ... glTexCoord2f ... glEnd." Sadece hayır. glBegin, glVertex vb. hiçbir zaman doğru değildi. glDrawArrays, OpenGL 1.1 (1997) 'de kullanılmaya başlanmıştır ve daima glBegin ve End üzerinde kullanılmalıdır.
API-Beast

9

Donanım uyumluluğu hakkında bazı istatistikler için Steam anketine bakabilirsiniz: http://store.steampowered.com/hwsurvey/ DX10 ve DX11'i listelemesine rağmen, donanım uyumluluğu sırasıyla OpenGL 3 ve OpenGL 4 ile aynıdır. Rağmen insanlar üzerinde OpenGL sürücü kurulum durumu genellikle DX daha kötüdür.

Windows XP, DX10 veya DX11'i desteklemez, ancak sürücülerin iyi olması koşuluyla OpenGL 3 ve 4 iyi olmalıdır. OSX OpenGL 3'ü (maksimumda) destekler, Linux'ta ATI / NVIDIA satıcı sürücüleri ile OpenGL 4 alırsınız (elbette sadece donanım destekliyorsa).

Ayrıca OpenGL'nin mobil ES sürümleri de var. Aslında OpenGL ES 2.0'a bakmanızı öneririm, çünkü daha küçük, öğrenmesi çok daha kolay, ancak modern uygulamaları, yani gölgelendiricileri ve VBO'ları kullanmanız gerekiyor. Ayrıca çoğu mobil cihazda kullanılan şeydir (böylece mobil oyunlar yapmaya başlayabilirsiniz) ve ayrıca WebGL temelde aynıdır, bu yüzden hızlı bir şekilde öğrenme avantajlarıyla web tarayıcınızda tüm öğrenmenizi yapabilirsiniz. OpenGL ES 3.0 bu yaz geliyor.

Mozaikleme bir OpenGL 4.0 özelliğidir. İlk önce, diğer temel gölgelendiricileri öğrenmelisiniz, ancak ilginç olduğunu kabul ediyorum - aslında onunla küçük bir test yazdım: http://blog.tapiov.net/post/15189341463/playing- ile OpenGL-4-mozaik


4
Kahretsin, knight666 daha detaylı bir cevapla beni dövdü. Yine de, ES kısmı düşünmeye değer.
Tapio
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.