OpenGL 2.1 öğrenmek bugün işe yaramaz mı?


44

3D OpenGL / DirectX dünyasında yeniyim ve OpenGL 4.1 ve GLSL teknik özelliklerinin bugün piyasaya çıktığını öğrendim.

Bir arkadaşım bana OGL v2.1 için Kırmızı Kitap verdi, ancak okuduğum kadarıyla, 3.x ve 4.x, 2.x'ten çok farklı ve şimdi birçok şey kullanımdan kaldırıldı.

Kitabı, 3D ve CG'nin temellerini öğrenmeye başlamak için kullanabilir miyim, yoksa daha yeni bir kopya bulmak daha mı iyidir?


10
OpenGL / DirectX hakkında fazla bir şey bilmiyorum ama bir yaşından büyük bir makinede oyun oynamayı seviyorum. 3.x öncesi OpenGL'yi bilmenin oyun alışkanlıklarıma faydalı olacağını hayal ediyorum. Sadece bir düşünce.
Simurr

Bu sorunun ifade edilmesinden hoşlanmıyorum. OpenGL 2.1'de bir oyun yapabilir misiniz ? Cevap: kesin bir Evet . O zaman işe yaramaz ne demek istiyorsun ? 3D'nin temellerini eski bir kitaptan veya eski API'den öğrenebilir misiniz? Yine kesin bir evet . Öyle mi best-best-bessssssst Bunu yapmanın yolu? Muhtemelen hayır .
bobobobo,

Yanıtlar:


18

Bu gibi zamanlarda her zaman Steam Donanımı Anketine yöneliyorum: http://store.steampowered.com/hwsurvey/ - DX10 / 11 sınıfı sistemlerin piyasaya girmesinin neredeyse% 80 olduğunu göreceksiniz; bu geniş ölçüde GL3.3 veya daha yüksek bir değere eşittir. Bu% 80, Vista / 7 kullanıcıları ile sınırlıdır - XP ile birlikte bir DX10 / 11 GPU ekleyin ve% 90'ın üzerine çıkın.

Burada biraz daha sert oyunculardan bahsettiğimizi aklımızda tutarak, hedef kitlenizi düşünmeye başlamanız gerekir. Bunlar hedeflemek istediğiniz insanlar mı? Bunun yerine daha düşük seviye donanımlara sahip olanları mı hedefliyorsunuz? Intel grafikleri ne olacak? Peki ya Mac ve Linux kullanıcıları? Bunların tümü, kendiniz için cevaplamanız gereken sorular, bu nedenle genel olarak genel kurallar, elde edeceğiniz en iyisidir.

Buna ek olarak, bugün bir şeyler nakliye niyetiyle öğrenmeye başlarsanız, oraya varmadan en az yaklaşık bir yıllık bir süreye bakıyor olduğunuzu hesaba katmalısınız. gerçekten önemsiz / basit vakalar hakkında). Gfx yeteneklerinin yükselme trendi devam ederken, o zamana kadar% 100 GL3.3 + donanım alımına yakın gerçek olmaya bakıyoruz.

Öyleyse, GL2.1 veya daha düşük bir sürümle, kendinizi GL2.1'in gölgelendiricileri ve VBO alt kümesini sınırlandırsanız bile, çok fazla miktarda eski bir saçmalık öğrenecek ve kullanacaksınız (alt seviye GLSL sürümleri kullanmak çok zordur). ve akış VBO'ları GL_ARB_map_buffer_range olmadan tamamen kullanışsızdır) - GL3.3 + birçok şeyi ele almanın çok daha güzel (ve daha performanslı) yollarını sunmuşsa , oyuncunun donanımını daha iyi kullanacaksınız (ve onlara minnettar olacağım) bunun için sen) ve sen gerçekten işbirliği yapmak istemeyen bir API ile savaşmak yerine üretken kod yazmak için daha fazla zaman harcıyorsun.

Ve sonra tabii ki korkunç bir sürücü durumu var. Asıl zor olan gerçek şu ki, Windows’taki GL sürücülerinin üzücü bir durumda olduğu - NV’nin yapmaması gereken şeyleri desteklediği, AMD’nin yapması gerekenleri desteklemediği ve Intel’de gerçekten olması gereken GL işlevlerini kısıtlamanız gerekiyor. D3D'de bir eşdeğer. GL_VERSION ne kadar yeni olursa, sürücü hatalarıyla karşılaşmanız olasıdır, ancak GL3.3 için işler şu anda oldukça kararlı.

Dolayısıyla, özet, başka herhangi bir bilginin (hedef kitle, vb.) Olmaması durumunda, temel olarak GL3.3'ü (muhtemelen kullanılabilir olduğu ve kod tabanını bozmadığı daha yüksek GL_VERSION'lardan işlevsellik çekerek) hedeflememdir. çok fazla) daha aşağı inmek için çok kesin ve kesin olarak tanımlanmış bir neden olmadığı sürece (ve " eski donanımlara sahip olanlar hakkında ne gibi belli belirsiz bir kavram" kullanmak yerine bundan kesinlikle% 100 emin olmak isterdim ). İkinci durumda, GL2.1'in altına inmezdim ve o zaman bile mümkün olan en fazla 3.x işlevselliğini kullanmaya çalışırdım.


GL3.3 ~ = DX10 / 11 ve Steam donanım istatistiklerinde harika bir nokta.
Nate

Sadece bu istatistikleri güncellemek için - DX10 / 11 GPU + Vista / 7 şu anda ~% 88, DX10 / 11 GPU + XP için% 4.38 daha eklediniz ve% 90'dan fazla penetrasyona bakıyorsunuz. Alımı, bu orijinal yazıyı yaparken beklediğimden çok daha hızlı artıyor.
Maximus Minimus

"GL3.3 + birçok şeyi ele almanın çok daha güzel (ve daha performanslı) yollarını getirdi" - Buna karşılık 3.2 nasıl ücret alıyor? Mac kullanıcıları henüz 3.3'ü alamazlar. Neredeyse aynı olduğunu varsaydım, ama fazla varsaymak istemiyorum.
michael.bartnett

38

Ben 2.1 ve sadece OpenGL 2.1 destekleyen donanım ve sürücüleri bir sürü var hâlâ 3. kesiştiği ile yapışmasını öneririm, ama OpenGL 3 çekirdek tarafından teşvik uygulamaları vardır daha iyi. Bu öğretici , başlamak için oldukça iyi bir yerdir (3'te kullanımdan kaldırılmış özellikler olmadan OpenGL 2.0'ı öğretir).


3
Joe Groff dersi için +1. Sizi Bölüm 2'deki tüm boru hattından geçirir. Ayrıca eklediği herhangi bir "yardımcı" kod yalnızca iki işlevdir: biri dosyada okumak (GLSL için) ve diğeri TGA görüntülerini okumak için (ve başka birini de kullanabilirsiniz) örnek kitaplığı aldıktan sonra resim kitaplığı ekleyin veya kendi resim yükleyicinizi yazın). Her şey açıklandı ve öğreticinin bir parçası.
michael.bartnett

18

Yararsız olmadığını söyleyebilirim.

Neden? Dünyanın geri kalanı OpenGL 3.x ve 4.0'ı desteklerken, Mac OS X hala yalnızca OpenGL 2.1'i destekliyor. Ve, çoğu olmasa da taşınabilir platformlarda kullanılan OpenGL ES hala tüm sürümlerde yaygın olarak desteklenmektedir: 1.0, 1.1 ve 2.0; kabaca OpenGL 1.4, 1.5 ve 2.1 ile karşılaştırılabilir.

Yani OpenGL ES 1.0 olacak OpenGL 2.x bilerek yeryüzünden tamamen kaybolana kadar değil bir atık olabilir.

Tabii ki OpenGL 3.x veya 4.0'ın onu destekleyen platformlarda kullanılmasının bir değeri olmadığı söylenemez.

Güncelleme: Mac OS X Lion (10.7) sürümünden itibaren, OpenGL 3.2 Çekirdek profili artık Mac'te desteklenmektedir. Bu sürüm, API’yi basitleştirmek için OpenGL 1.x’in büyük parçalarını kullanımdan kaldırıyor. OS X'in (ve düşük kaliteli Intel grafiklerinin) eski sürümlerinin kullanıcıları hala OpenGL 2.0 ve 2.1 ile sınırlıdır. OpenGL 2.x'i tanımak yine de faydalıdır ve bir süre böyle kalacaktır.


Snow Leopard, OpenGL 3'ün çoğu uzantısını, hatta geometri gölgelendiricilerini desteklemektedir.
Axel Gneiting

@Alex "Çoğu" uzantıların desteklenmesi, GL3'ün desteklendiği anlamına gelmez. Ve biz sadece 3.x hakkında konuşuyoruz
Matias Valdenegro

@ Eksen Gneiting: Sadece aynı değil. OpenGL 3.0+ 'ın ilginç özelliklerinin çoğu, uzantı olarak mevcut değil . Çok sayıda çekirdek değişiklik var.
greyfade

12

mh01'in cevabı temel bilgilerin çoğunu kapsıyordu, bu yüzden birkaç destek ekleyeceğim.

OpenGL ES

ES 2.0 ve masaüstü GL 2.1 ve masaüstü GL 3.3 hakkında konuşalım. Bu tartışmanın amacı için, "GL XY" terimi masaüstü OpenGL sürüm XY'ye, "ES XY" ise OpenGL ES XY'ye atıfta bulunacaktır.

Yapısal olarak , ES 2.0, GL 2.1 ile karşılaştırıldığında, çekirdek GL 3.3 ile daha yaygındır. GL 3.3 ve ES 2.0 her ikisi de saf gölgelendirici tabanlıdır. Her ikisi de saf tampon nesne tabanlı. Etc GL 2.1, ES 2.0'a kolayca taşınabilir olmayacak bir GL 2.1 uygulaması yazmayı kolaylaştıracak birçok performans ve kodlama tuzağına sahiptir.

Bununla birlikte, gölgelendirme dili sözdizimi açısından , GLSL ES 1.00 (ES 2.0 ile eşleme), GL 2.1'in GLSL'sine GL 3.3'lerden çok daha fazla benziyor. attributeVe varyinganahtar sözcükler 3.3 çekirdek içinde mevcut değildir; 2'den fazla gölgelendirici aşaması ile uğraşırken çok daha tutarlı ve makul olanı kullanır inve outbu nedenle ES 3.0, GL 3.3 sözdizimini benimsemiştir.

GL 3.3'te öğrenilen kavramları ES 2.0 ile eşleştirmek kolaydır . Öyleyse, bunu yapmak için çeşitli araçlardan herhangi biri için GL 3.3'ü öğrenirseniz, ES 2.0 dünyasında nasıl çalışacağınızı anlayacaksınız. Elbette alt kümenin nerede olduğunu bulmanız gerekecek (yani: GL 3.3'ün ES 2.0'ın yapabileceği şeyler), ancak kavramlar aynı.

Gölgelendiricileri birinden diğerine kopyalayabilmeniz için GLSL'nin sözdizimini eşleştirmek biraz daha zordur. Fakat gerçekten, gereken tek şey, doğru yerlerde birkaç tanım. Ayrıca, GLSL 3.30 highpve benzeri pek çok ES uyumluluk özelliğine sahiptir (masaüstü GLSL'de hiçbir şey yapmaz).

Böylece, GL 2.1'den GL 3.3'den öğrenirken ES 2.0 için bir şeyler kazanırsınız.


8

Yalnızca daha yeni sürümlerde ortaya çıkan OpenGL’de yapılan büyük değişiklikler gerektirmeyen oyunlar için, yalnızca 3.x + 'ı kullanmak sizi bir nvidia 8 serisi ve üstü ile sınırlandırır (bakmak istediğiniz diğer grafik satıcılarından emin değilsiniz). Yani, 3.x + özelliklerini kullanmıyorsanız, sadece eski, ama çok güçlü grafik kartlarının oyununuzu oynamasını engelleyen yapay bir limit yaratıyorsunuz.

Bu nedenle ileriye dönük uyumlu altkümeyi ve daha yeni sürümleri öğrenmenizi ve ardından oyununuzu etkili bir şekilde zorlayabileceğiniz en düşük sürümü seçmenizi tavsiye ederim. Yapabilirsin

Ayrıca OpenGL: ES 2.0'ın sabit boru hattını kaldırdığı başka bir soruya cevaben de not edeceğim, bu nedenle 2.1'ten 3.0'a eşit. Bunun yanı sıra, çalışma zamanında desteklenen gl sürümünde her zaman farklı özellikleri de destekliyor.


4

Kırmızı Kitabınızı kullanarak OpenGL'yi öğrenmenin sakıncalı olduğunu söyleyebilirim, sadece yeni sürümlerde (glBegin (), glEnd () gibi - bunun yerine VBO'ları kullanın) kullanımdan kaldırılan şeyleri görmezden gelin. Yeni sürümlerdeki işlevlerin çoğu, uzantılardan önce zaten mevcuttu.


4

Ben çoğunlukla thbusch ile aynı fikirdeyim. Ancak kullanımdan kaldırılan API'leri tamamen görmezden gelmezdim: hala onları kullanan çok fazla kod var. Yine de onlara daha az dikkat ederdim. Örneğin, glBegin (), glEnd () 'i kendi kodunuzu kullanarak yazabilmeniz için yeterince iyi öğrenmenize gerek yok. Fakat onları gördüğünüzde tanımanız ve ne yaptıkları hakkında bir fikriniz olması gerekir.

Örnek kodu oluşturmasanız ve OpenGL 3.x'te durdurulan özellikleri kapsayan alıştırmalar yapsanız bile, en az bir kez tüm Kırmızı Kitap boyunca okumaya değer.


3

Kısa cevap:

Hayır. OpenGL 2.1'i öğrenmek, “iyi kısımları” öğrendiğiniz sürece, bugün bile iyi bir fikirdir.

Uzun cevap:

OpenGL, esas olarak iki bölüme ayrılabilir: "İyi bölümler" ve "Eski işlevler".

Açıkçası, eski işlevleri ("sabit işlev") öğrenmede pek fayda görmüyorum. Bununla birlikte, OpenGL 2.1'in (iyi kısımlar) önemli bir kısmı nispeten küçük değişikliklerle bugün hala mevcuttur.

Bu nedenle, OpenGL 2.1'in bazı kısımlarını öğrenmek faydalı olabilir. Özellikle, OpenGL ES 2 bugünlerde çok popülerdir ve ES 2 çoğunlukla (ancak tam olarak değil) bir OpenGL 2.1 alt kümesidir. Akıllı telefonlarda 3B programlama için, OpenGL ES 2 bir zorunluluktur.

Peki "iyi" nedir? Temel olarak OpenGL 3.x "çekirdek profili" ("uyumluluk profili" nın aksine) ve / veya OpenGL ES 2'de olan her şey.

  • Köşe ve parça Shader'ları: Öğrenin
  • Dokular: Hala iyi.
  • Matrisler: Nasıl çalıştıklarını bilmek faydalıdır, ancak glLoadIdentitybu tür işlevler eskidir ve bundan kaçınılmalıdır.
  • Işık: Bilgisayar grafiğindeki ışığın nasıl simüle edilebileceğini bilmek faydalıdır, ancak glLightfvdiğer sabit işlevli ışık işlevlerinden kaçınılmalıdır.
  • Dizi tamponları: İyi
  • glBegin, glVertex, glColor, glEnd: Onları kaçının. Hızlı deneme için iyi olabilir, ancak bunu yapmanın daha iyi yolları var.
  • Listeleri görüntüle: Kaçının

Bu cevabı ilk gönderdiğim soru yinelenen bir çıktı, bu yüzden burada tekrar gönderirim.


1

Bunun kötü bir fikir olduğuna inanmıyorum. Pek çok GL kavramı OpenGL'nin tüm sürümlerini kapsar ve sonuçta size yardımcı olacaktır. 10 yıl önce bugün hala yardımcı olan bir dizi OpenGL kitabım var. OpenGL’de yeniyseniz ve daha eski olan daha iyi kitaplar varsa, çok şey öğreneceksiniz ve kodun hala çalışması gerektiğini söyleyebilirim. OpenGL’nin çoğu geriye uyumludur (inanıyorum).


1

Önce modern şeyleri öğrenmenizi ve ihtiyacınız olana kadar eski şeylerin var olmadığını iddia etmenizi öneririm.

Güncel olmayan şeyler bazı durumlarda yararlı olabilir, örneğin yalnızca OpenGL 1.5 veya daha eski sürümlerini destekleyen bir şey için programlamaya çalışıyorsanız (eski boktan netbook'larda ve eski MacOS sistemlerinde bulunabilir), OpenGL ES 1.x (eski iPhone'lar) ve 1.6 öncesi Android) ya da OpenGL SC (jet avcı uçağı üzerinde bir ekran programlıyorsanız, Güvenli Kritik alt kümesi). Örneğin Minecraft, OpenGL 1.3'e karşı inşa edilmiştir, bu yüzden gerçekten eski donanımları destekleyebilir (ancak 'gelişmiş' bir seçeneğe sahip olsa da).

Ekranda sadece piksel almak istiyorsanız ve onu 'doğru' şekilde yapmakla ilgilenmiyorsanız da yararlı olabilir.

OpenGL'nin varsayılan olarak -1.0 - 1.0 görüntüleme çerçevesi ayarlama ve gölgelendiricisiz oluşturma gibi şeyleri öğrenirken varsayılan olarak yaptığı bazı özelliklere güvenmek faydalıdır. Bu, her şeyi 1 seferde yapmak zorunda kalmadan öğrenmenize olanak sağlar.

Ancak bunun dışında mümkünse atlanması gerekir.

Daha ayrıntılı bilgi için cevabım burada ve burada kontrol etmenizi öneririm .

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.