OpenGL 2D oyunlar için uygun mu?


43

Bir süredir kendime OpenGL kütüphanesini öğretiyorum ve bir oyuna başlamak istiyorum. Ancak, daha kolay bir giriş için, yukarıdan aşağıya doğru bir Pokemon tarzı oyun gibi 2D bir şeyle başlamak istiyorum.

Bu iyi bir plan mı, yoksa OpenGL özellikle 3D için mi yapılmış?



2D için OpenGL kullanmanın bir faydasının, gölgelendiricilerin avantajlarından yararlanmanız olduğunu düşünüyorum. Bunlar özel efektler elde etmek için faydalı olabilir. Diğer bir avantaj, OpenGL'yi zaten biliyorsanız, API'yi zaten bilmiş olmanızdır.
Lysol

Yanıtlar:


43

OpenGL 2D oyunlar için oldukça uygundur. Genel olarak 3D için kullanılmasına rağmen, aynı işlev 2D oyunlar için kullanılabilir. Diğer bir deyişle, 3D OpenGL ile yapabileceğiniz her şey "2D" OpenGL ile uygulanabilir.

Bu yerde daha fazla bilgi bulabilirsiniz .

2D OpenGL, 3D OpenGL ile aynı şekilde elde edilir. 2D OpenGL sadece bir tekniğin uygulamasıdır, yani sahneyi düz bir düzlem üzerinde gösterip, ardından kurulumunuza bağlı olarak sahneyi bozabilecek perspektif bir projeksiyon yerine ortografik projeksiyon kullanmaktır.

Bir örnek:

Orto vs bakış açısı

(a) bir ortografik projeksiyondaki sahnedir. (b) perspektif projeksiyon kullanarak aynı sahne. Bir 2D oyunda, eğer derinliklerinde değişiklik olursa spriteların yanlış pozisyonlanmasına neden olabilir (bu, gelişmeye nasıl devam ettiğinize bağlı olarak olabilir). Perspektif izdüşüm kullanmak, ekran koordinatlarındaki şeyleri hizalamayı da zorlaştırır.

Ek olarak, OpenGL bununla birlikte birçok, çok, çok fayda sağlar. Öncelikle, donanım ivmesi çok büyük bir artı. Ayrıca, ekran kartının ne yaptığı ve bunun nasıl yürüdüğü üzerinde daha küçük bir kontrol derecesi var ve bu durum büyük / küçük harfe özel optimizasyonlara izin veriyor


Çok teşekkür ederim! Sadece bunu yapmanın uygun olacağını onaylamak istedim.
w4etwetewtwet

4
2D için OpenGL kullanma yeteneğine ve ilgisine sahipseniz, size sadece OpenGL'nin verebileceği birçok ödülü getirecektir. Blistering performansı, platformlar arası uyumluluk ... Bunu bu şekilde düşünün. Neredeyse 2D için diğer tüm seçenekler yine de OpenGL üzerine inşa edilecek . Bazı "arabulucuları" kesmek için harika bir fırsat
Steven Lu

2
@StevenLu'dan bahsetmiyorum bile, gerçek bir programcının
Outurnate

Harika okuma! Bağladığın için teşekkürler. Yup: 2D'nizi düz OpenGL ile kodlamak sadece biraz daha kötü, bu yüzden yapmalısınız.
Steven Lu,

1
Sadece bir link yerine bu cevaba daha fazla bilgi vermelisin. GL'nin neden 2B (ortografik görünümler) için çalıştığını ve ne gibi avantajlar getirdiğini (donanım ivmesi, gölgelendirici efektleri) açıklayabilir.
Sean Middleditch

21

OpenGL adının belirtildiği gibi bir grafik kütüphanesidir. 3B göz önünde bulundurularak geliştirilmiş olmasına rağmen, kütüphanede 3B kullanacağınız kesin bir varsayım yoktur. Dahası, 3d yetenekleri sayesinde, kesinlikle 2d bir yaklaşımla yapılması zor olan birkaç şey önemsizdir. Örnekler:

  • Z-sıralama, 3B koordinatları kullanarak derinlik arabelleğini basitleştirir (yine de şeffaflığa dikkat et)
  • Sprite döndürme ve ölçekleme, çözünürlükten bağımsız dokulu dörtlü kullandığınız için temel olarak ücretsizdir.
  • Kendinizi OpenGL 2.0 özellikli grafik kartlarıyla sınırlandırmak istiyorsanız, özel efektler yazmayı çok kolaylaştıracak gölgeleyicilerden yararlanabilirsiniz (bulanıklaştırma, parçacık efektleri, görüntü işleme, renk değiştirme) - CPU tarafında yapılandan çok daha hızlı

Bu sadece kafamın tepesinden gelen bir kaç avantaj, sanırım birkaç tane daha var.


3
Lütfen kendinizi OpenGL 2.0 (veya üstü) özellikli grafik kartlarıyla sınırlandırın, OpenGL 2.0 2004'te piyasaya sürüldü, hatta bu oldukça eski.
Slicedpan

@Slicedpan, ne yazık ki bazı dizüstü bilgisayarlar / netbooklar hala GL 1.4 max destekli Intel kartları ile birlikte geliyor - şahsen onları hendeklemeye karar verdim, ancak bazı kişiler (özellikle basit oyunlar yaparken) onları desteklemek isteyebilir.
Kornel Kisielewicz

16

OpenGL bir 3B API iken, 2B oyunlar yapmak için yine de kullanabilirsiniz. Bir 2D ortamını, verileri bir düzlemde tutmak gibi çeşitli tekniklerle 3B olarak taklit edebilirsiniz.

Ancak, gerçek API'de bunu bariz bir şekilde yapmak için sınırlı destek vardır (örneğin, "2D modu aç" işlevi yoktur). Simüle etme yönteminiz (çevrimiçi olarak birçok derste bulabileceğiniz), aslında başlık altında kullanılan 3B boru hattını anlamadan tam olarak anlamak zor olabilir.

Bir süredir OpenGL'e bakıyormuşsunuz ve muhtemelen bu temelleri iyi bir şekilde kavramışsınız. Bununla birlikte, üzerlerinde titreklik hissederseniz, oyuna, OpenGL'in üzerine, cocos2d gibi yerleşik bir 2D kütüphanesini kullanarak başlamak isteyebilirsiniz . Her şeyi kendi başınıza halletmeye hazır olmadığınızı düşünüyorsanız, 2B API'lerin genel olarak neye benzemesi gerektiği konusunda bir deneyim verecektir ve hala donanım hızlandırmalı bir 3D arka uçtan faydalanmanızı sağlar.



4

SDL veya SFML gibi pek çok 2d grafik kütüphanesi OpenGL donanım ivmesini kullanıyor. Bu size OpenGL’nin performans avantajını verir, ancak çok düşük seviyeli detayları çok daha basit bir API’nin arkasına çeker.


0

Artık OpenGl programlama konusunda çok deneyimim var ve size bunun bir acı olduğunu söyleyebilirim. Geçmişte programlamaya başladığımda BlitzBasic gibi basit ortamlarda çok üretkendim. Sonra C ++ ve OpenGl öğrenimiyle bir sonraki adıma geçmeye başladım. Ve sorulacak iyi bir öğretmen ya da insanınız olmadığında, kalıcı olarak siyah ekrana geçeceksiniz. En büyük sorun, OpenGl’in cehennemi. Opengl durumunu değiştirmek için değiştirebileceğiniz tonlarca anahtar vardır. Bazı anahtarlar diğer anahtarlara bağlıdır. örneğin glGet (GL_TEXTURE_BINDING_2D), glGet'e (GL_ACTIVE_TEXTURE) bağlıdır. Ve hangi devletin hangi devletin en iyi olmadığına bağlı olduğuna dair belgeler. Doku yükleme gibi birçok işlem, bu durumu değiştirmenizi gerektirir; bu, genellikle eski durumu gerektiren diğer kodların kırılmasına neden olur. Ve sonra OpenGl'in uygulamaya bağlı davranış olarak ortaya çıkması ve programınızın makinenizde çalışabilmesi için diğer makinede çalışabilmesi için gördüğünüz tek şey siyah. Burada yapabileceğiniz tek şey, 10000 kod satırınızda neyin yanlış olduğunu tahmin etmek. Öyleyse hayal kırıklığını seviyorsanız, evet, 2D şeyler için OpenGl kullanın. Diğer tüm insanlar için, ihtiyacınız yoksa yapmayın. OpenGl'de üretken olabilirsiniz, ancak bu size zamanınız ve sinirleriniz için çok mal olacak. Muhtemelen harcamak istediğinden daha fazla. OpenGl'de üretken olabilirsiniz, ancak bu size zamanınız ve sinirleriniz için çok mal olacak. Muhtemelen harcamak istediğinden daha fazla. OpenGl'de üretken olabilirsiniz, ancak bu size zamanınız ve sinirleriniz için çok mal olacak. Muhtemelen harcamak istediğinden daha fazla.


-2

Unity3D, OpenGL'yi ve bunu 2D ve 2.5D platformları için kullanıyorum. Unity3D aslında bir 3D Oyun Motoru, ancak aynı zamanda 2D ve 2.5D oyunlar için de kullanılıyor. X, y, z düzlemlerine sahip olabilir ve hareketi veya rotasyonu yalnızca bu düzlemlerin 2'siyle sınırlandırabilir ve esasen bir 3B dünyada 2B atmosfer yaratabilirsiniz.


Harika, ilk oyum. Gamedev'in de nefretleri olduğunu görmek güzel.
Apollo YAZILIMI

1
Sanırım gerçek dünyadan örnekler aracılığıyla bir noktayı gösterme üzerine kaşlarını çattı. Çok profesyonel.
Apollo YAZILIMI

7
Amit, alt oylar "düşmanları" göstermiyor. Aşağı oylar, topluluğun sorular ve cevaplar hakkındaki görüşlerini aktarmasının bir yoludur. Bu sizin için kişisel değil, bu şekilde almamaya çalışın. Reddi yapan kişinin reddedilme sebebi hakkında yorum yapması gerektiğine katılıyorum, çünkü cevabı geribildirim olmadan nasıl geliştireceğinizi bilmiyorsunuz. Size neden reddedildiğini düşündüğümü söyleyeyim. Bir kişinin 2D oyunlar için OpenGL kullanması, bir bütün olarak uygun olduğu anlamına gelmez. Ayrıca neden uygun olduğuna dair nedenler de belirtmelisiniz .
MichaelHouse

2
Evet, insanların neden aşağı oy kullandıklarından emin değilim; "OpenGL kullanır" biti ile "netice gerektiren platformlarda OpenGL kullanır" (iOS / Anrdoid / OSX / Linux hariç her yerde Direct3D veya konsola özel API'ler kullanır) ile açıklığa kavuşturulması gerektiğini düşündüm, ancak bu bir düzeltme değil.
Sean Middleditch

1
Kendimi küçümsemedim, ama bu cevabın uygunsuz olmasının bir başka nedeni de, çok fazla şey değiştiren ham OpenGL değil, OpenGL tabanlı bir motor kullanıyor olmanız.
w4etwetewtwet
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.