Modern OpenGL (3.0 veya üstü) öğrenmek için iyi kaynaklar? [kapalı]


73

OpenGL (3.0 veya üstü) ile başlamak için iyi bir kaynak arayışına girdim. Pek çok kitap buldum ama hiçbiri iyi bir kaynak olarak kabul edilemez!

İşte iki örnek:

OpenGL Programlama Kılavuzu (7. basım) http://www.amazon.com/exec/obidos/ASIN/0321552628/khongrou-20 Bu, kullanımdan kaldırılmış malzemelerin TAMI! Hemen hemen her bölüm bu konuda bir notla başlar.

OpenGL Superbible (5. Basım) http://www.amazon.com/exec/obidos/ASIN/0321712617/khongrou-20 Bu kitap, yazarın neyi öğrenmek istediğinizi gizleyerek, ana argümanları açıklamak için yarattığı bir kütüphane kullanır! Kütüphanenizi nasıl kullanacağınızı öğrenmek istemiyorum! OpenGL'yi öğrenmek istiyorum!

Umarım bu, "hey, Google’ı kullanamıyorum ... OpenGL’yi nasıl öğreneceğimi söyle" gibi bir soru olmadığını anlamışsındır. Tam ve derin bir aramayı yeni bitirdim ancak "yeni" OpenGL'yi kullanımdan kaldırılan konuları önleyerek öğrenmek için iyi ve eksiksiz bir kaynak bulamıyorum.

Birisi beni doğru yöne götürebilir mi? C ++ 'ı biliyorum ve geliştirme konusunda 10 yıllık deneyime sahibim ... nerede iyi bir kaynak bulabilirim ?! Bunun üzerinde zaman geçirmek istiyorum ve derinlemesine öğrenmek istiyorum.

Yanıtlar:


69

Birkaç kitapla yukarıdaki kitaplara katılıyorum:

  • OpenGL programlama 8. rehberi çıktı ve modern OpenGL 4.3 için yeniden yapıldı.

  • SuperBible 5th ed, başlamak için bir koltuk değneği kütüphanesi olmasını sağlar, ancak kitaptan geçerken o kütüphanenin işlevselliğini yeniden uygularsınız, böylece sonunda tamamen ustalaşmalısınız. Ayrıca, nesne yönelimli bir dil kullanıyorsanız OpenGL öğelerini bir şeye sarmanızı şiddetle tavsiye ederim. Eğlenmek için kendi kütüphanem üzerinde çalışıyorum, gidilecek yol gibi görünüyor, onu kendim uygulayarak tüm giriş ve çıkışları anlıyorum ve yalnızca gerçekten kullandığım parçaları kullanmam gerekiyor. Ayrıca, gölgelendiricilere veri gönderme gibi bazı şeyleri soyutlayabilirsiniz (shinyMaterial.setColor (Kırmızı) çok daha güzel değildir), bu da eski alternatifleri sağlayarak bazı şeyleri desteklemenize olanak sağlar. Bir de oglplus var .

Modern 'çekirdek' OpenGL öğrenme ile ilgili temel sorun, sadece bir küp çizmek için bile basit bir boru hattı oluşturmak ve çalıştırmaktır. Aşağıdakileri anlamanız gerekir:

  • Matrix işlemleri ( eğer C ++ 'ta GLM kullanıyorsanız , burada bir MatrixStack OpenGL Resmi olmayan SDK sürümüne veya burada basit olanıma da ihtiyacınız olacak .)
  • GLSL gölgelendirici programlaması.
  • gölgelendiricilere ve Vertex Buffer Objectlerine ciltleme verileri. Sadece gerçek saf çekirdek profilini öğrenmek istiyorsan, hepsinin aynı anda uygulanması gerekecek ve eğer bir şey kırılmışsa, hiçbir şey görmeyeceksin ve yanlış gittiği yeri neredeyse hiç bilmiyorsun. Bu aynı zamanda temel aydınlatma gibi şeyleri de kapsamaz (programlama diline ek olarak gölgelendirme algoritmalarını öğrenmeniz gerekir).

Ancak, çekirdek profil ile özveriyle başlamanıza gerek yok. Kullanımdan kaldırılan işlevlerin bir kısmını başlangıçta kullanın, hemen hemen her şey onu destekleyecektir, sonra onu modernleştirin.

Bir başka konu da 'modern' OpenGL'in gerçekten 3 şeye başvurabileceği:

  • İlki, sabit fonksiyonlu boru hattının aksine programlanabilir gölgelendirici boru hattıdır. Temel 'modern' teknikler, OpenGL 2.0'ın 2004 yılında piyasaya sürüldüğü günümüzde piyasaya sürüldüğü gölgelendiricilerin (öğreticilerin henüz güncellenmediği) piyasaya sürülmesinden bu yana mümkün olmuştu. Sorun şu ki, OpenGL geliştiricileri bugün bile tüm bunlardan yararlanamayabilirler, sadece OpenGL 1.5'i destekleyen Intel yonga setleri ve sadece iPhone'ları destekleyen Android / Android telefonlar gibi pek çok berbat netbook var OpenGL ES 1.1. OpenGL 2.0 ve OpenGL 3.x / 4.x'teki bu şeyler arasındaki tek gerçek fark şu anda çekirdek profil için zorunludur.

  • Modern OpenGL ayrıca 3.x, 4.x'deki yeni öğelere de gönderme yapabilir. Vertex Dizi Nesneleri , Framebuffer Nesneleri , Düzgün Tampon Nesneleri / std140 , düzen niteleyicileri , GLSL alt programları gibi şeylerve bunun gibi. Bulduğumların çoğu program yapmak için çok daha güzel şeyler yapabilir. Ayrıca genel motor boru hatlarınızı incelikle değiştirebilirler. Bunlar ayrıca, yardımcı işlevler vb. Yaparak küçük bir çabayla destekleyebileceğiniz şeylerdir (Örneğin, UBO'lar desteklendiğinde değerleri el ile gölgelendiricilere yüklemeyi yöneten kullanın; , belki de otomatikleştirmek için oraya küçük bir gölgelendirici yeniden yazı koyun). Bu şey yalnızca yeni video kartlarında çalışır, onu destekleyen herhangi bir netbook veya herhangi bir yeni nesil video oyun konsolunu görmezsiniz (OpenGL ES'ye benzer kendi OpenGL alt kümelerini kullanırlar). En son OSX sadece 3 tane var.

  • Ultra Modern yeni nesil OpenGL. OpenGL 4.3 daha yeni çıktı. Hesaplama gölgelendiricileri, glMultiDrawElementsIndirect ve gölgelendirici depolama tamponları ile birlikte gelir. Bu, tüm köşe verilerini GPU'ya yüklediğiniz ve ardından programınızda yapmak yerine ne çizilmesi gerektiğini hesaplamak için hesaplama gölgelendiricileri kullandığınız temelde farklı bir boru hattı sağlar. Ne yazık ki bu çok yeni, bu yüzden herhangi bir iyi öğreticiler bilmiyorum. Bunun nasıl çalıştığının ana hatlarını veren OpenGL 4.3 incelemesine bir göz atın (ayrıca yazar bunu anlatan yayınlanacak bir GPU Pro makalesi olduğunu da söyler). Yepyeni olmak, bu aşamada hiçbir yerde desteklenmeyecek (beta sürücülerle daha yeni bir nvidia kartı olmadıkça). Bazılarını uygulamak için OpenCL / CUDA kullanabilirsiniz.

GlBegin, glEnd, glVertex *, glNormal *, glTextCoord *, glTranslate *, glRotate *, glLoadIdenity, glModelViewMatrix ve benzerlerini atlardım. Bunun yerine, gölgelendiricisiz Vertex Tampon Nesneleri öğrenmeye başlamak için, bu noktada 3D'yi düz düz beyaz bir üçgen kullanmayın, böylece matrisleri kullanarak 3 boyutlu işlemlerle çalışmak zorunda kalmazsınız (kısa zamanda bunları gölgelendiricilere bağlamayı öğrenmeniz gerekir) eski yoldan öğrenmenin anlamı yok). Daha sonra gölgelendiricilere eklediğinizde, artık köşe özelliklerini kullanmak isteyeceğinizden, köşe tamponu nesnelerinizin bağlama şeklini değiştirmeniz gerekecektir. Üniformalarla özelliklerin onlara nasıl iletileceğini öğrenin. Ardından, GLM ile matris işlemlerini öğrenin, matrisleri gölgelendiricilere bağlayın ve 3B çalışmasını sağlayın. Bunu yaptıktan sonra temelde sadece tekstüre gibi daha gelişmiş şeyleri öğrenmek,

Çoğu OpenGL 2.0+ ile çalışan gölgelendirici programlama boru hattını kapsayan bazı genel çevrimiçi modern OpenGL dersleri:

Diğer genel öğrenme kaynakları için. OpenGL ES iyi bir başlangıç ​​noktası olabilir. OpenGL ES, kullanımdan kaldırılan tüm şeyleri temizledi. OpenGL 4.1, OpenGL ES ile tam bir uyumluluğa sahiptir, bu nedenle bir OpenGL ES programı almak ve OpenGL 4.1'de çalıştırmak mümkün olmalıdır. Ve temel ilkeler her ikisi için de aynıdır.

Unutulmaması gereken bazı şeyler, OpenGL ES 3.0'ın henüz piyasaya sürüldüğü, ancak yeni olduğu için henüz herhangi bir öğretici veya donanım desteğine sahip olmayacağı. Herhangi bir önemli temel değişiklik gözükmüyor (OpenGL ES 1.0-> 2.0 ile gördüğümüz sabit boru hattı ile gölgelendirici modeli arasındaki fark gibi). Yani muhtemelen güncel olmayan şeyleri öğrenmeyeceksiniz.

Ayrıca, OpenGL ES sıklıkla EGL kullanacaktır, bu yüzden bir Pencere açmak için başka bir yol öğrenmeniz gerekecektir, ancak bu çok zor olmamalıdır. Aksi halde, etrafta birkaç OpenGL ES sarmalayıcısı / emülatörü vardır veya varsa (veya emülatörlerini kullanırken) Android / iPhone'da öğrenebilirsiniz.

Orada Addison Wesley OpenGL ES 2.0 Programlama Kılavuzu kırmızı kitabın eşdeğerdir.

Ayrıca, modern OpenGL’nin çoğunun yaşadığı yer olan GLSL gölgelendirici odaklı konulara da bakabilirsiniz. Sadece öğrendiklerinizin şeylerin OpenGL bağlayıcı “yapıştırıcı” tarafını kapladığından emin olmanız gerekir.

OpenGL Gölgelendirme Dili 2. basımına (Turuncu Kitap) bakın.

OpenGL 4.0 Gölgelendirme Dili Yemek Kitabı biraz daha kanama getiren OpenGL eşyalarını kapsıyor ancak kapsamlı bir eğitici değil. Üniforma tampon nesneleri ve GLSL alt programları gibi en son gerçek dünya OpenGL uygulamalarında biraz bilgi sahibi olmak kesinlikle bir göz.

Sonunda WebGL'ye bakabilirsiniz, ancak JavaScript’te olsa da biraz daha farklı ve hata ayıklaması daha zor olacaktır.


3
+1, vay. Önerdiğim tek küçük değişiklik başlangıçta VBO'lara daha kolay bir yol olduğu için başlangıçta istemci tarafı köşe dizileri kullanmak olacaktı, ancak yeni başlayanların içine düşebilecek ayı tuzağı yoktu.
Maximus Minimus

1
Öğrenilmemesi gereken şeyler olacağından, özellikle kullanımdan kaldırılmış işlevselliği öğrenmekten / kullanmaktan kaçınmanın en iyisi olduğunu düşündüm. Kullanmayı önerdiğim diğer kullanım dışı şeyler, OpenGL'nin varsayılan olarak yapacağı şeylerdir, gölgelendirici kullanmadan işlem yapabilme ve köşe niteliği 0'ın her ikisinin de çekirdek profili açıldığında patlaması gereken konum olduğunu varsayarsak.
David C. Bishop,

2
SuperBible’ın 6. basımı henüz yayınlandı ve 5. basımdan çok daha iyi. Son derece, çok tavsiye ediyorum, takip etmek ve modern OpenGL ile öğrenmek kolaydır.
Philip,

2
Arcsynthesis gltut sitesi artık mevcut değil, fakat öğretici hala indirilebilir bitbucket.org/alfonse/gltut/wiki/Home
Arto Bendiken

15

En azından programlama rehberinin 8. basımı çıkana kadar kitapları unut.

Bahsedilen eğitimin yanı sıra, bu siteyi yararlı buldum , çünkü temelleri oldukça hızlı bir şekilde geçiyor. Her ikisi de modern OpenGL'ye harika bir giriş. Bunu geçtikten sonra, sadece belgelere ihtiyacınız olacak, OpenGL alıştığınızda kullanımı kolaydır. Gerisi bilgisayar grafik teorisi ve matematiktir.


11

Seninle aynı durumdayım ve sonunda gitmek için ihtiyacım olanı buldum.

Öncelikle buraya gidin: http://www.arcsynthesis.org/gltut/ . Bu site harika, iyi çalışan örnekler ve neler olup bittiğinin derin açıklaması. Kod C ++ dilinde yazılmış olsa bile, bunu Lisp'e OpenGL demoları yazmamı öğretmek için kullanıyorum. Ayrıca, eski şeyleri yapmanın tamamen özgür olmasından dolayı kötü alışkanlıklar edinme konusunda endişelenmenize gerek kalmaz.

“Sadece başka bir web sitesi” olmasına rağmen, bu konudaki temel bilgileri açık ve net bir şekilde veren herhangi bir kitap bulamadığımı vurguluyorum.

Yukarıdaki siteyi geçtikten sonra, zaten temel bir gölgelendiriciyi kavrayacaksınız ve bilmeniz gereken şeylerin birçoğu artık googled olabilir (tüm kullanımdan kaldırılan şeyleri kaldırdıklarında, seçeneklere veya webgl kaynaklarına iyi bir göz atın) veya opengl wiki sitesinde bulundu. Daha sonra korkunç bir şekilde kriptik olur, eğer kemerinizin altındaki arsentez sitesindeki temellere sahip değilseniz, ancak ne aradığınızı kabaca bildiğiniz zaman oldukça yardımcı olur.

Ayrıca GLSL'ye gerçekten derin bir bakış için daha sonra şuna bir göz atın: OpenGL Shader Language (The Orange Book) Bu konuda çok yavaş çalışıyorum, ancak bu arayışınızı daha da ilerletebilmenizi sağlamak için gölgelendiriciler yazma anlayışı verecektir. Sizi, bu kitabın bir gözden geçirenin ifadesiyle "600 sayfalık bir kitabın içine yerleştirilmiş 200 sayfalık yüksek kaliteli içerik" içerdiği konusunda uyarıyorum, ancak fazladan tarih ve bilgi OpenGL’in kullanabildiğiniz rotaları anlamanız için gereken içeriği sağlayabilir Bir standart olarak gitti (yine de bana yardım ediyor!)

Umarım bu yardımcı olur ve bol şans, gelecekte çalışmalarınızı görmeyi / oynamayı dört gözle bekliyorum!

GÜNCELLEME

Arcsentesis ne yazık ki çevrimdışı görünüyor, ancak site burada pdf biçimine dönüştürüldü ve kod buraya yansıtıldı .

Ayrıca orjinal cevabımdan bu yana geçen birkaç sene içerisinde learnopengl.com/ kesinlikle mükemmeldi. Modern opengl'e girişinin ham mükemmellik için hala arşentez önersem de, ögrenci sitesi, arsistezin yaptığıdan çok daha fazlasını kapsar ve onu ulaşılabilir bir dille yönetir, örnekler ve açık kaynak kodları oluşturduk. Temel olarak, lanet olsun, kontrol et!

Kitaplarla ilgili olarak turuncu kitaptan çok fazla uzaklaşmadım, ancak 'Gerçek Zamanlı Rendering'in üçüncü baskısını önerebilirim . Teknik şeyler için hazır olduğunuzda, bu kitap bir altın madenidir.


2
AMAN TANRIM! ilk bağlantı fantastik!
MatterGoal

Gltut sitesi artık mevcut değil, fakat öğretici hala indirilebilir bitbucket.org/alfonse/gltut/wiki/Home
Arto Bendiken

İyi nokta, gönderimi de ek önerilerle güncelleyeceğim.
Baggers


5

Benim için çok faydalı olan iki site: http://www.arcsynthesis.org/gltut/ ve http://ogldev.atspace.co.uk/

Ayrıca, OpenGL wiki son derece iyi ve güncel bir kaynaktır.

Bunları atlattıktan sonra, mermiyi ısırmanızı ve OpenGL özelliklerini okumanızı şiddetle tavsiye ederim. O zaman bir profesyonel olursun.


Evet, çevrimiçi öğreticileri çoğu kitaptan çok daha faydalı buluyorum. SuperBible 5. baskısı son derece hayal kırıklığı yaratıyor.
Philip,

Gltut sitesi artık mevcut değil, fakat öğretici hala indirilebilir bitbucket.org/alfonse/gltut/wiki/Home
Arto Bendiken

4

Karşılaştığım en iyi kitap "modern" OpenGL'yi kapsıyor http://www.packtpub.com/opengl-4-0-shading-language-cookbook/book

Her ne kadar bir "yemek kitabı" olsa da, oluşturma ve ne tür eşlik eden kitaplıklara ihtiyaç duymanız gerektiği konusunda size gerekli adımları atıyor (image lib, vector math lib).

Buna ek olarak, OpenGL'yi kullanmak isteyebileceğiniz her türden ortak konudan geçer, bir şeye çok derine dalmadan (gölgeler için olduğu gibi, gölge haritalama ve gölge haritalarını filtrelemeyi kapsar, ancak daha fazlasına girmez) karmaşık gölge haritalama yöntemleri).

Portakal kitabını almayı da tavsiye ederim.


Mari @ teşekkür ederim. Gölgelendirici hakkında "sadece" değil mi? Yani, bu kitap gölgelendiricilerin yanı sıra OpenGL tekniklerini de tanıtıyor mu?
MatterGoal

2
@ MatterGoal: Modern OpenGL neredeyse tamamen gölgelendirici bazlı. Bu kitap şeylerin OpenGL ciltleme tarafını kapsar. Ayrıca bu kitabı tavsiye ediyorum ama başka bir şeyin arkadaşı olarak, aslında çekirdek öğrenme kitabı için değil, moddrn uygulamalarının harika gerçek dünya kullanımlarını gösteriyor.
David C. Bishop,

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.