2D oyunlar için, Direct3D veya OpenGL gibi bir 3D API kullanmamanın bir nedeni var mı?


20

Bir süredir hobi oyun geliştirme sürecindeyim. Bunu yaptığımda, çoğu insan 2D oyunlar oluşturmak için Direct Draw'u kullandı. Durduğumda insanlar dikgen bir projeksiyonla OpenGL veya Direct3D diyorlardı.

Özellikle cep telefonunda ama belki de XNA platformunda 2D oyunlar oluşturmaya geri dönmeyi düşünüyorum. OpenGL kullanarak bir şeyler yapmak için kendimi 3D gelişimine alıştırmak için (umarım) küçük bir öğrenme eğrisim olurdu.

Bunu atlamak ve bunun yerine pikselle doldurmam gereken bir Genişlik x Yükseklik çerçeve arabelleği olan bir 2D çerçeveyle çalışmak için herhangi bir neden var mı?


Bu soru aslında yanlış ... Yani: Direct3D ve OpenGL gerçekten 3D API değil, değil mi? Donanım hızlandırması sunuyorlar, ancak hem 2D hem de 3D. Orada küçük bir fark var.
jacmoe

Yanıtlar:


20

Kesinlikle arka uçta 3D oluşturucu kullanan bir şey kullanıyor olmalısınız. Ancak üst düzey kodunuzda Z eksenini bile görmemelisiniz. Bütün bunlar daha düşük seviyelerde soyutlanmalıdır. Doğrudan pikselleri işliyorsanız, muhtemelen yanlış bir şey yapıyorsunuzdur.

Kendi oyunlarım için, 2D nesnelerle uğraşmak için bir dizi sınıf oluşturdum. Oyun mantığım sadece x ve y koordinatları ile ilgiliydi. Sınıflarım ayrıca döndürme, ölçekleme, karışım modları, vb.

Tabii ki, kullanabileceğiniz mevcut 2D kütüphaneleri de var - Cocos2D, iPhone'da popüler bir kütüphanedir. Bu kitaplıkların tümü olmasa da çoğu, mevcut hızlandırmadan yararlanabilmeleri için daha düşük seviyeli 3D API'leri üzerine inşa edilecektir.


Ben xna sahne arkasında 2d api ele nasıl duymak isterdim
Iain

5
Sonunda hepsi 3D. 2D render iş atı olan Spritebatch, gölgelendirici bir efekttir.
drxzcl

Arayüzü uygulamadan ayırmak için +1.
Steve S

@Iain DirectX11'de XNA yazarları xnatoolkit.codeplex.com tarafından yazılmış bir XNA alıştırması .
ClassicThunder

8

3D API kullanmamanın bir nedeni var.

Yalnızca NA, Kuzeybatı AB ve Japonya'daki bilgisayarlar destekliyor ...

Örneğin Brezilya'da yaşıyorum, kardeş bilgisayarım yeni, çok çekirdekli bir işlemciye, birkaç GB ram'a sahip ve yine de OpenGL oyunları çalıştırmıyor.

Örneğin ben sadece kendi bilgisayarımda Cüce Kalesi oynayabilir (OpenGL kullanın), herhangi bir diğer bilgisayarda yavaş tarama çalışır buluyorum.

Ve bu sadece Brezilya ile ilgili bir sorun değil, etraftaki insanlara sordum ve dünyanın birçok yerinde yaygın ... Aslında OpenGL veya Direct3D uyumlu kartlara sahip olan nüfus azınlıktır ...

Sadece bu azınlık şirketlerden daha fazla ilgi görüyor ...

Ancak sadece bu "geleneksel" pazarları (NA, Kuzeybatı AB, JP) hedefliyorsanız, o zaman bunun için gidin!

Bu düşüş için DÜZENLEME: Açıkçası katılmıyorsunuz, öyleyse, HİÇBİR'in artık crappy VIA veya SIS çipli (veya başka bilinmeyen veya daha kötü üreticilerin) hiçbiri veya sadece OpenGL 1.0 desteği olan bilgisayarları göndermediğine dair kanıtınız var mı?

Evimde bunun gibi İKİ makine var ve ikisi de yeni (her ikisinin birden fazla çekirdeği var, her ikisinin de 2GB ram var, her ikisinin de 2GHz üzerinde saat frekansı var ...)

Üniversitemde bunun gibi 200 makine var, hatta bazı Dell tarafından üretilen makineler.

Çok basit, GPU'lar pahalı (hatta berbat Intel olanlar bile) ve kötü pazarlarda, bir lüks, MS Word'ü çalıştırmak ve e-postaları okumak için makine satın alan insanlar, iyi bir grafik yongasına sahip bir makine satın almayacaklar. 50 USD daha ucuz bir tane satın alabilirler, özellikle 50 USD çoğu insanın bir ay boyunca yiyecek almak zorunda kaldığı zaman.

LÜTFEN, buraya bir üçüncü dünya ülkesini hiç ziyaret etmediyseniz BS dediğimi söyleyerek gelmeyin ve ayrıca üçüncü dünya ülkelerinin insanların oyun oynamadığını, çok oynadıklarını söyleme, Osmos Linux sürümünün piyasaya sürülmesiyle ilgili geliştirici yayını, gelen trafiklerin çoğunun (aslında çoğu) Rusya'dan geldiğine dikkat çekti, çünkü bu insanlar genellikle göz ardı edildi.

Burada Brezilya'da, en popüler oyun Yazılım modunda çalışan Counter-Strike ... Bazı Lan-Houses, GPU'lu makinelerin sadece% 10'una, hatta 200 veya 300 istasyonlu büyük götlere sahip ...

Bu konuyu yayınlamamalıydım, aşağı oyu çekeceğini biliyordum, bunu yayınlamak için ücretsiz puan kaybım oldu, her oyunumun neden 5.0 yerine Directgro 4.4 kullandığını her açıkladığımda 5.0 doğrudan çizmeyi desteklemediğinden yazılım modu Birçok insandan bir çeşit yalancı olduğumu veya OpenGL hızlandırmasının gerçek kullanılabilirliği hakkında bu gerçeği söylediğim için aptal olduğumu söyleyen bir sürü plak alıyorum.

DÜZENLEME 2: OpenGL olan oyunları oynayabilmek ve geliştirebilmek için ailemin ve diğer insanların bana bir GeForce 8600 satın almaları için yalvarmalıydım (bu hala Mass Effect 1 ve diğer UT3'ü çalıştırabileceğini bulduğum en ucuz karttı -motor oyunları), bana bir tane aldılar, ama şimdi birkaç yıl daha başka hediyeler almadım, doğum günü hediyeleri bile değil, ne kadar pahalı olduğu için ve umarım bu kart 3 veya 4 yıl daha çalışır ...

DÜZENLEME 3:
Pratik bir örnek: Eletronic Arts, Ultima Online için 2D grafikleri için 3D hızlandırma kullanan yeni bir müşteri yaptı ... Sonuç: Saçma derecede düşük çerçevelerden şikayet eden çok sayıda oyuncu ve EA, yeni müşteri (şimdi eski müşteriyi kullanmaya devam etmesine izin veriliyor)

2015'te DÜZENLEME 4: Bu cevap çoğunlukla tarihi eser olarak bırakılacak, şu anda son derece berbat yongaları olan bilgisayarların sayısı üçüncü dünya ülkelerinde bile düşüktür, hala ofis amaçlı bilgisayarlarda hala mevcuttur, ancak bunlar değildir. artık yaygın olarak, artık Yazılım modu API'ları ile çalışmaya değer olduğunu düşünmüyorum, OpenGL tabanlı API'ler şimdi gitmenin yoludur.


3
Bugün 3D'yi desteklemeyen çipler yok. Büyük olasılıkla sadece sürücüleri güncellemeniz gerekir, çünkü Windows tarafından sağlananlar OpenGL desteği ile birlikte gelmez. Orada en yaygın bok GPU Intel GMA şeyler ve hatta bazı temel OpenGl desteği var.
Axel Gneiting

1
Tekrar tekrar: Burada yongalar Intel GMA şeyler daha WORSE vardır. Ve evet, bazı değiştirilmiş sürücüler sorunu çözüyor, ancak kullanıcıların bunu bilmesini bekleyemezsiniz.
hız

Pratik bir örnek: Eletronic Arts, Ultima Online için 2D grafikleri için 3D hızlandırma kullanan yeni bir müşteri yaptı ... Sonuç: Saçma derecede düşük karelardan şikayet eden çok sayıda oyuncu ve EA, yeni istemcinin kullanımını zorlama kararında destek verdi (şimdi eskisini kullanarak kalmasına izin veriliyor)
hız

1
Yeni müşteri 2008'den geldi, hikayem şöyle diyor: 2008'deki insanlar bir OpenGL istemcisinden hoşlanmadı ve 1997 müşteriyi kullanmaya geri döndü.
speed

1
Kişilerin sürücülerini güncellememesi, bilgisayarlarının OpenGL ve Direct3D'yi desteklemediği anlamına gelmez. OP sadece OpenGL / Direct3D uyumluluğunu kontrol etmelidir. Orada değilse, kullanıcıya sürücülerini güncellemesini söylemelidir. Bu, muhtemelen ikinci ve üçüncü dünyalarda bile vakaların% 98,6'sında çalışacaktır. Cidden, OpenGL / Direct3D desteği olmayan bir bilgisayara bağlayabilir misiniz?
Avi

3

Hayır, yok. 3B oluşturucu kullanarak daha iyi efektler ve daha hızlı render elde edersiniz. Örneğin, burada küre etkileri, 3d shader ağırlıklı yalın halde birçok yönden they 2d etkileri de - (bir hafta sonunda) Birkaç hafta önce yapılan bir 2d oyun. Benzer şekilde, bu oyun için mevcut oluşturma teknolojisini kapsamlı bir şekilde kullandım - orada devam eden üç veya dört farklı piksel gölgelendirici etkisi var, bunların hepsi daha hızlı gelişmeme ve daha güzel hale getirmeme izin veriyor.

3D'yi kucaklayın ve sevin, ancak daha az eksenle sevin.


2

3D API'leri genellikle gitmenin yoludur. Bugünün GPU'ları 3D grafikler oluşturmak için tasarlandığından, oldukça sağlam bir performans garanti edersiniz. ZorbaTHut'un dediği gibi, 3D rotaya gitmek piksel gölgelendiriciler gibi şeylerden yararlanmanıza izin verir.

Artık orada pek çok 2D API yok. DirectDraw kullanımdan kaldırılmıştır ve buradaki 2B / vektör tabanlı kitaplıkların çoğu, görüntülemelerini yine de gerçekleştirmek için OpenGL veya Direct3D kullanır. Modern UI araç setleri bile oluşturma ve birleştirme işlemleri için 3D API'lerden yararlanıyor. Örneğin WPF'yi (Microsoft'un en son UI çerçevesi) ele alın: oluşturma için Direct3D kullanır.


2

DirectDraw'ı kullanmak hala OpenGL veya D3D'den çok daha hızlı olacak şekilde, berbat / mevcut olmayan 3d hızlandırma ve sürücüler hiç güncellenmemiş gerçekten şaşırtıcı sayıda eski makine var. Bunu, diğer platformları desteklemek için OpenGL'de yeni bir oluşturma arka ucu yazmaya çalıştığımda yaklaşık 10 yaşında olan 2d çok oyunculu bir oyun üzerinde çalışırken yaşadım. Birçok oyuncu OpenGL modunun düşük kare hızları nedeniyle oynanamaz olduğunu bildirdi. Brezilya posteri ile bunun ABD ve Avrupa dışında daha yaygın olduğunu da kabul ediyorum, ancak bu yerlerde de hala geçerli.

Cep telefonlarını veya XNA'yı hedefliyorsanız, kesinlikle 3D kullanın. Ama herhangi bir bilgisayarda, herhangi bir yerde çalışan bir oyun yapmak istiyorsanız, DDraw ile sopa diyebilirim.


1

Aklıma gelen tek şey, 2B üzerinden bir 3D API kullanmanın bazı temel karmaşıklık katmasıdır. En azından OpenGL'de dokuları yüklemeniz ve yönetmeniz gerekir ve bunları çizdiğinizde geometriyi doğru yapmanız gerekir. Bir sarıcı katman bu sorunları çözer.

Bununla birlikte, bir 3D grafik arka uç kullanmanın olumsuz yanlardan daha fazla yönlü olduğu görülüyor, bu yüzden bana sorarsanız, çabaya değer.


1

Oyununuz yeterince basitse ve oyunun özellikle netbook'lar ve eski dizüstü bilgisayarlarda (3D hızlandırma veya çok az - eski Intel entegre grafikler vb.) Düşük seviye makinelerde iyi çalışmasını istiyorsanız, yine de saf olarak düşünmeye değer. 2D çerçeve tampon yaklaşımı

Oyunun en azından düşük uçlu bir ATi / NVidia kartı / yonga gerektirmesinden memnunsanız, 3D API kullanmak, çok sayıda harika şey (alfa karıştırma, ölçekleme / döndürme vb.) Yapmanıza izin verecektir. saf bir yazılım oluşturucuda iyi / verimli bir şekilde yapmak zor olurdu.

Ayrıca, 'saf 2D'de çok basit olan birkaç şeyin, 3D donanım (ve bilinear filtreleme / alfa harmanlama) söz konusu olduğunda daha ilginç hale geldiğini unutmayın. Çarpılmış alfa kavramını anlar. Ayrıca, yakınlaştırılabilir / döndürülebilir bir görünüm istiyorsanız, 2B tilemaptaki döşemeler arasındaki dikişleri nasıl ele alacağınızı da düşünün.

Ayrıca doluluk oranının sınırlı olduğunu unutmayın. Ve bu sınırlara 2B'de ulaşmak şaşırtıcı derecede kolaydır. Çokgenleriniz olmayabilir, ancak çok sayıda alfa karışımlı paralaks katmanı veya parçacık veya efekt efekti istiyorsanız, oldukça yüksek kaliteli bir 3D oyun kadar çok sayıda pikseli kolayca doldurabilirsiniz.

Ama genellikle, 3D donanım harika ve katkı karıştırma arkadaşın :)

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.