Od dłuższego czasu nie interesuję się tworzeniem gier. Kiedy to robiłem, większość ludzi używała Direct Draw do tworzenia gier 2D. Zanim przestałem, ludzie mówili, że OpenGL lub Direct3D z ortogonalną projekcją to już tylko droga.
Zastanawiam się nad powrotem do tworzenia gier 2D, w szczególności na telefon komórkowy, ale może także na platformie XNA. Aby zrobić coś przy użyciu OpenGL, miałbym (mam nadzieję) małą krzywą uczenia się, aby przyzwyczaić się do rozwoju 3D.
Czy jest jakiś powód, aby to pominąć i zamiast tego pracować z ramą 2D, w której po prostu mam bufor ramki Szerokość x Wysokość, którą muszę wypełnić pikselami?
Odpowiedzi:
Zdecydowanie powinieneś używać czegoś, co korzysta z renderera 3D na backendie. Ale w kodzie wyższego poziomu nie powinieneś nawet widzieć osi Z. Wszystko to należy wyodrębnić na niższych poziomach. Jeśli bezpośrednio manipulujesz pikselami, prawdopodobnie robisz coś złego.
Dla własnych gier zbudowałem zestaw klas do obsługi obiektów 2D. Moja logika gry dotyczyła tylko współrzędnych xiy. Moje zajęcia zajmowały się także obrotami, skalowaniem, trybami mieszania itp.
Oczywiście istnieją również biblioteki 2D, z których można również korzystać - Cocos2D jest popularną biblioteką na iPhone'a. Większość, jeśli nie wszystkie, z tych bibliotek będą zbudowane na interfejsach API 3D niższego poziomu, aby mogły korzystać z dostępnego przyspieszenia.
źródło
Istnieje powód, aby nie używać 3D API.
Obsługują je tylko komputery w NA, północno-zachodniej UE i Japonii ...
Mieszkam na przykład w Brazylii, mój siostrzany komputer jest nowy, ma procesor wielordzeniowy, kilka GB pamięci RAM, a jednak nie obsługuje gier OpenGL.
Mogę na przykład grać w Dwarf Fortress (używam OpenGL do renderowania grafiki ASCII) na własnym komputerze, na dowolnym innym komputerze, który działa powoli.
I to nie jest problem tylko z Brazylią, pytałem ludzi w okolicy, i jest to powszechne w kilku miejscach na świecie ... Populacja, która faktycznie posiada karty kompatybilne z OpenGL lub Direct3D, jest mniejszością ...
Tyle, że ta mniejszość zyskuje więcej uwagi firm ...
Ale jeśli kierujesz reklamy tylko na te „tradycyjne” rynki (NA, Northwest EU, JP), wybierz to!
EDYCJA dla tych, którzy przegłosowali: Oczywiście, że się nie zgadzasz, więc czy masz DOWÓD, że Nikt nie wysyła już komputerów z kiepskimi układami VIA lub SIS (lub nawet innymi nieznanymi lub gorszymi producentami) bez żadnej lub tylko obsługi OpenGL 1.0?
Mam dwa takie urządzenia w moim domu i są nowe (oba mają więcej niż jeden rdzeń, oba mają RAM 2 GB, oba mają częstotliwość taktowania powyżej 2 GHz ...)
Moja uczelnia ma 200 takich maszyn, nawet niektóre komputery Dell.
Jest to po prostu proste, procesory graficzne są drogie (nawet kiepskie procesory Intela), a na biednych rynkach jest to luksus, ludzie kupujący maszyny do uruchamiania MS Word i czytający e-maile nie kupią maszyny z przyzwoitym układem graficznym, gdy mogą kupić tańszy o 50 USD, zwłaszcza gdy 50 USD jest tym, co większość ludzi musi kupować za cały miesiąc.
PROSZĘ, nie przychodź tutaj, mówiąc, że mówię BS, jeśli nigdy nie odwiedziłeś kraju trzeciego świata, a także, nie mów, że ludzie z krajów trzeciego świata nie grają w gry, robią, Osmos post deweloperów na temat uruchomienia ich wersji dla Linuksa wskazał, że dużo ruchu przychodzącego (właściwie większość) pochodzi z Rosji, po prostu dlatego, że ci ludzie są zwykle ignorowani.
Tutaj w Brazylii najbardziej popularną grą jest Counter-Strike, działający w trybie oprogramowania ... Niektóre domy Lan mają tylko 10% maszyn z GPU, nawet duże z 200 lub nawet 300 stacjami ...
Nie powinienem o tym pisać, wiedziałem, że przyciągnie to głosy negatywne, dostałem darmową utratę punktów za opublikowanie tego, za każdym razem, gdy wyjaśniam, dlaczego moja inna gra używa Allegro 4.4 zamiast 5.0, ponieważ 5.0 nie obsługuje Direct Draw lub tryb oprogramowania Dostaję wiele błędów od wielu osób, które mówią, że jestem kłamcą lub że jestem głupi, mówiąc tę prawdę o faktycznej dostępności akceleracji OpenGL.
EDYCJA 2: Aby móc grać i rozwijać gry, które mają OpenGL, musiałem błagać moich rodziców i innych ludzi, aby kupili mi GeForce 8600 (była to najtańsza karta, którą znalazłem, która wciąż może obsługiwać Mass Effect 1 i inne UT3 - gry z silnikami), kupili mi jedną, ale teraz mam kilka lat i nigdy więcej nie dostaję innych prezentów, nawet prezentów urodzinowych, ze względu na to, jak drogo było, i mam nadzieję, że ta karta będzie działać przez kolejne 3 lub 4 lata ...
EDYCJA 3:
Praktyczny przykład: Eletronic Arts stworzył nowego klienta dla Ultima Online, który wykorzystuje akcelerację 3D do grafiki 2D ... Wynik: Wielu graczy narzeka na absurdalnie niskie liczby klatek na sekundę i EA wycofuje się z decyzji o wymuszeniu użycia nowy klient (teraz można nadal używać starego)
EDYCJA 4 w 2015 r .: Ta odpowiedź zostanie pozostawiona tutaj głównie jako artefakt historyczny, obecnie liczba komputerów z wyjątkowo kiepskimi układami scalonymi jest niska, nawet w krajach trzeciego świata, nadal istnieją, szczególnie na komputerach biurowych, ale wcale tak nie jest powszechne już, nie sądzę, że warto już pracować z interfejsami API w trybie oprogramowania, interfejsy API oparte na OpenGL są już teraz dobrym rozwiązaniem.
źródło
Nie, nie ma. Lepsze efekty i szybsze renderowanie uzyskasz za pomocą renderera 3d. Na przykład, oto gra 2D, którą zrobiłem kilka tygodni temu (w jeden weekend) - efekty kul oparte są mocno na shaderach 3D, mimo że pod wieloma względami są efektami 2D. Podobnie szeroko wykorzystałem dostępną technologię renderowania w tej grze - są tam trzy lub cztery różne efekty cieniowania pikseli, z których wszystkie pozwalają mi szybciej się rozwijać i sprawiają, że jest ładniejszy.
Przyjmij 3d i pokochaj go, ale pokochaj go jedną osią mniej.
źródło
Interfejsy API 3D są zazwyczaj dobrym rozwiązaniem. Dzisiejsze układy GPU są zaprojektowane do renderowania grafiki 3D, więc masz gwarancję dość solidnej wydajności. I jak powiedział ZorbaTHut, wybranie trasy 3D pozwala korzystać z takich rzeczy, jak shadery pikseli.
Naprawdę nie ma już tak wielu interfejsów API 2D. DirectDraw jest przestarzałe, a większość bibliotek opartych na 2D / wektorach korzysta z OpenGL lub Direct3D i tak do renderowania. Nawet nowoczesne zestawy narzędzi interfejsu użytkownika wykorzystują interfejsy API 3D do renderowania i komponowania. Weźmy na przykład WPF (najnowszą platformę interfejsu użytkownika Microsoft): do renderowania używa Direct3D.
źródło
Wciąż istnieje zaskakująca liczba naprawdę starych maszyn z kiepskim / nieistniejącym przyspieszeniem 3d i sterownikami, które nigdy nie były aktualizowane, tak że korzystanie z DirectDraw będzie nadal znacznie szybsze niż OpenGL lub D3D. Doświadczyłem tego podczas pracy nad 2d multiplayer, która ma teraz około 10 lat, kiedy próbowałem napisać nowy backend renderowania w OpenGL, aby obsługiwać inne platformy. Wielu graczy zgłosiło, że tryb OpenGL był niemożliwy do odtworzenia z powodu niskiej liczby klatek na sekundę. Zgodziłbym się również z brazylijskim plakatem, że jest to bardziej powszechne poza USA i Europą, ale nadal jest prawdą również w tych miejscach.
Jeśli celujesz w telefony komórkowe lub XNA, zdecydowanie użyj 3D. Ale jeśli chcesz stworzyć grę, która działa na dowolnym komputerze, gdziekolwiek, powiedziałbym, że trzymaj się DDraw.
źródło
Jedyne, co mogę wymyślić, to to, że użycie interfejsu API 3D w porównaniu z interfejsem 2D dodaje nieco podstawowej złożoności. Przynajmniej w OpenGL musisz ładować i zarządzać teksturami, a kiedy je narysujesz, musisz poprawnie wyregulować geometrię. Warstwa opakowania rozwiązuje te problemy.
To powiedziawszy, korzystanie z zaplecza grafiki 3D wydaje się mieć więcej zalet niż wad, więc jeśli mnie zapytasz, warto spróbować.
źródło
Jeśli gra jest wystarczająco prosta i chcesz, aby gra działała dobrze na słabszych komputerach, w szczególności na netbookach i starszych laptopach (bez akceleracji 3D lub bardzo minimalnie - starsza zintegrowana grafika Intel itp.), Nadal warto rozważyć czystą Podejście do bufora klatek 2D
Jeśli jesteś zadowolony z faktu, że gra wymaga przynajmniej niskiej klasy karty / układu ATi / NVidia, skorzystanie z 3D API pozwoli ci zrobić wiele fajnych rzeczy (mieszanie alfa, skalowanie / obrót itp.), Które byłoby trudne zrobić dobrze / wydajnie w czystym rendererze oprogramowania.
Pamiętaj również, że kilka rzeczy, które są bardzo proste w „czystym 2D”, stają się bardziej interesujące, gdy zaangażowany jest sprzęt 3D (i dwuliniowe filtrowanie / mieszanie alfa). Zrozumieć pojęcie wstępnie pomnożonej alfa. Zastanów się też, na przykład, jak radzić sobie ze szwami między płytkami w 2D mapie tilem, jeśli chcesz uzyskać widok z możliwością powiększania / obracania.
Pamiętaj również, że wypełnienie jest ograniczone. I zaskakująco łatwo jest osiągnąć te ograniczenia w 2D. Być może nie masz wielu wielokątów, ale jeśli chcesz mieć wiele warstw paralaksy z domieszką alfa, cząstek lub efektów pocztowych - możesz dość łatwo wypełnić tyle pikseli, co dość zaawansowana gra 3D.
Ale ogólnie rzecz biorąc, sprzęt 3D jest niesamowity, a mieszanie dodatków jest twoim przyjacielem :)
źródło