Czy OpenGL jest odpowiedni do gier 2D?

44

Od dłuższego czasu uczę się biblioteki OpenGL i chcę zacząć tworzyć grę. Jednak dla łatwiejszego wprowadzenia chcę zacząć od czegoś 2D, na przykład odgórnej gry w stylu Pokemona.

Czy to dobry plan, czy też OpenGL jest stworzony specjalnie dla 3D?

w4etwetewtwet
źródło
Myślę, że jedną z zalet korzystania z OpenGL dla 2D jest to, że zyskujesz korzyści z shaderów. Mogą one być przydatne do osiągania efektów specjalnych. Kolejną korzyścią jest to, że jeśli znasz już OpenGL, to już znasz interfejs API.
Lysol

Odpowiedzi:

44

OpenGL jest całkiem odpowiedni dla gier 2D. Mimo że jest generalnie używany w 3D, ta sama funkcjonalność może być wykorzystywana w grach 2D. Oznacza to, że wszystko, co możesz zrobić z 3D OpenGL, będzie miało zastosowanie z OpenGL „2D”.

Więcej informacji można znaleźć w tej lokalizacji .

2D OpenGL osiąga się w taki sam sposób jak 3D OpenGL. 2D OpenGL to tylko zastosowanie techniki, to znaczy renderowanie sceny na płaskiej płaszczyźnie, a następnie użycie projekcji ortograficznej zamiast projekcji perspektywicznej, która w zależności od konfiguracji może zniekształcić scenę.

Przykład:

Orto kontra perspektywa

(a) jest sceną w rzucie ortograficznym. (b) to ta sama scena, wykorzystująca rzut perspektywiczny. W grze 2D może to powodować nieprawidłowe pozycjonowanie duszków, jeśli ich głębokość zostanie zmieniona (co może się zdarzyć, w zależności od tego, jak postępujesz w kwestii rozwoju). Korzystanie z rzutowania perspektywicznego utrudnia także wyrównanie współrzędnych ekranu.

Ponadto OpenGL niesie ze sobą wiele, wiele, wiele korzyści. Przede wszystkim przyspieszenie sprzętowe to ogromny plus. Istnieje również znacznie lepsza kontrola nad tym, co robi karta graficzna i jak sobie z tym radzi, co pozwala na optymalizację w zależności od przypadku

Outurnate
źródło
Dziękuję Ci bardzo! Chciałem tylko potwierdzić, że zrobienie tego byłoby w porządku.
w4etwetewtwet
4
Jeśli masz umiejętności i zainteresowanie korzystaniem z OpenGL do 2D, przyniesie ci wiele nagród, które może dać tylko OpenGL. Niesamowita wydajność, zgodność między platformami ... Pomyśl o tym w ten sposób. Zresztą prawie wszystkie inne opcje 2D byłyby zbudowane na OpenGL. To świetna okazja, aby odciąć niektórych „pośredników”
Steven Lu
2
@StevenLu i nie wspominając o tym, że jest nieco bardziej prawdziwym programistą
Outurnate
Świetna lektura! Dzięki za połączenie tego. Tak: kodowanie 2D za pomocą prostego OpenGL jest po prostu lepszym rozwiązaniem , dlatego powinieneś to zrobić.
Steven Lu
1
Powinieneś podać więcej informacji na temat tej odpowiedzi niż tylko link. Być może wyjaśnię, dlaczego GL działa dla 2D (widoki ortograficzne) i jakie przynosi korzyści (przyspieszenie sprzętowe, efekty cieniowania).
Sean Middleditch,
22

OpenGL, jak sama nazwa wskazuje, jest biblioteką graficzną. Chociaż opracowano go z myślą o 3d, w bibliotece nie ma ustalonych założeń, że będziesz używać 3d. Co więcej, dzięki możliwościom 3D, kilka rzeczy, które byłyby trudne do zrobienia w podejściu ściśle 2D, jest banalnych. Przykłady:

  • Sortowanie Z jest uproszczone dzięki zastosowaniu współrzędnych 3d bufora głębokości (uważaj jednak na przezroczystość)
  • obracanie i skalowanie ikonek jest zasadniczo darmowe, ponieważ używasz teksturowanych quadów, które są niezależne od rozdzielczości
  • jeśli chcesz ograniczyć się do kart graficznych obsługujących OpenGL 2.0, możesz skorzystać z shaderów, co znacznie uprości pisanie efektów specjalnych (rozmycie, efekty cząsteczkowe, manipulacja obrazem, zamiana kolorów) - nie wspominając już o tym, że będzie to o wiele szybciej niż po stronie procesora

To tylko kilka zalet, które pochodzą z czubka mojej głowy. Sądzę, że jest jeszcze kilka innych.

Kornel Kisielewicz
źródło
3
Ogranicz się do kart graficznych obsługujących OpenGL 2.0 (lub nowszych), OpenGL 2.0 został wydany w 2004 roku, nawet jeśli jest to dość przestarzałe.
Slicedpan
@Slicedpan, niestety niektóre laptopy / netbooki wciąż są wyposażone w karty Intel z obsługą GL 1.4 max - osobiście postanowiłem je porzucić, ale niektórzy ludzie (szczególnie przy tworzeniu prostych gier) mogą je wspierać.
Kornel Kisielewicz
16

Chociaż OpenGL jest interfejsem API 3D, nadal możesz go używać do tworzenia gier 2D. Możesz sfałszować środowisko 2D w 3D za pomocą różnych technik, takich jak przenoszenie danych do płaszczyzny.

Jednak rzeczywiste API ma ograniczoną obsługę robienia tego w oczywisty sposób (na przykład nie ma funkcji „włącz tryb 2D”). Sposoby jego symulacji (które można znaleźć w wielu samouczkach online) mogą być trudne do pełnego zrozumienia bez pewnego zrozumienia potoku 3D, który jest faktycznie używany pod maską.

Wygląda na to, że od dłuższego czasu przyglądasz się OpenGL, więc prawdopodobnie dobrze znasz te podstawy. Jeśli jednak czujesz się niepewnie, możesz zacząć od gry, korzystając z biblioteki 2D zbudowanej na OpenGL, takiej jak cocos2d . Daje to trochę doświadczenia z tym, jak ogólnie powinny wyglądać interfejsy API 2D, i nadal zapewnia korzyści przyspieszonego sprzętowo zaplecza 3D, jeśli czujesz, że nie jesteś gotowy do samodzielnego rozwiązania tego problemu.

Josh
źródło
5

Wiele bibliotek graficznych 2D, takich jak SDL lub SFML, wykorzystuje akcelerację sprzętową OpenGL. Daje to korzyści związane z wydajnością OpenGL, ale wyodrębnia nieprzyjemne szczegóły niskiego poziomu za znacznie prostszym interfejsem API.

Philipp
źródło
0

Mam teraz duże doświadczenie w programowaniu OpenGl i mogę powiedzieć, że to jest ból. W przeszłości, kiedy zaczynałem programować, byłem bardzo produktywny w prostych środowiskach, takich jak BlitzBasic. Potem zacząłem przechodzić do następnego kroku, ucząc się C ++ i OpenGl. A kiedy nie będziesz mieć dobrego nauczyciela ani ludzi, o co zapytasz, na stałe wpadniesz na czarny ekran. Największym problemem jest piekło stanowe OpenGl. Istnieje mnóstwo przełączników, które możesz zamienić, aby zmienić stan opengl. Niektóre przełączniki zależą od innych przełączników. na przykład glGet (GL_TEXTURE_BINDING_2D) zależy od glGet (GL_ACTIVE_TEXTURE). A dokumentacja, który stan zależy od tego, który inny stan nie jest najlepszy. Wiele operacji, takich jak ładowanie tekstur, wymaga zmiany tego stanu, co bardzo często prowadzi do uszkodzenia innego kodu wymagającego starego stanu. A potem pojawia się problem polegający na tym, że OpenGl zachowuje się zależnie od implementacji, tak że twój program działa na twoim komputerze, ale na innym komputerze wszystko co widzisz jest czarne. Możesz jedynie zgadywać, co jest nie tak w 10000 liniach kodu. Więc jeśli lubisz frustrację, to tak, użyj OpenGl do rzeczy 2D. Wszystkim innym ludziom, nie rób tego, jeśli nie jest to potrzebne. Możesz uzyskać produktywność w OpenGl, ale będzie to kosztowało dużo czasu i nerwów. Prawdopodobnie więcej niż chcesz wydać. Możesz uzyskać produktywność w OpenGl, ale będzie to kosztowało dużo czasu i nerwów. Prawdopodobnie więcej niż chcesz wydać. Możesz uzyskać produktywność w OpenGl, ale będzie to kosztowało dużo czasu i nerwów. Prawdopodobnie więcej niż chcesz wydać.

Arne
źródło
-2

Unity3D korzysta z OpenGL, a ja używam go do platformówek 2D i 2.5D. Unity3D to zasadniczo silnik do gier 3D, ale jest również używany do gier 2D i 2.5D. Możesz mieć płaszczyzny x, y, z i ograniczać ruch lub obrót tylko do 2 z tych płaszczyzn, tworząc atmosferę 2D w świecie 3D.

OPROGRAMOWANIE Apollo
źródło
Świetnie, moja pierwsza opinia. Cieszę się, że gamedev ma również hejterów.
OPROGRAMOWANIE Apollo
1
Wydaje mi się, że ilustrowanie punktu za pomocą przykładów ze świata rzeczywistego jest niezadowolone. Bardzo profesjonalnie.
OPROGRAMOWANIE Apollo
7
Niestety, opinie negatywne nie oznaczają „hejterów”. Downvotes to po prostu sposób na przekazanie opinii społeczności pytań i odpowiedzi. Nie jest to dla ciebie osobiste, więc staraj się nie traktować tego w ten sposób. Zgadzam się, że downvoter powinien skomentować przyczynę downvote, ponieważ nie wiesz, jak poprawić odpowiedź bez opinii. Powiem wam, dlaczego uważam, że zostało to przegłosowane. To, że jedna osoba korzysta z OpenGL do gier 2D, wcale nie oznacza, że ​​jest to właściwe. Musisz również uzasadnić, dlaczego jest to właściwe.
MichaelHouse
2
Tak, nie jestem pewien, dlaczego ludzie przegrywają; Uważam, że bit „używa OpenGL” powinien zostać wyjaśniony za pomocą „używa OpenGL na platformach, które go wymagają” (wszędzie używa interfejsów API Direct3D lub API dla konsol, ale iOS / Anrdoid / OSX / Linux), ale to bardziej wyjaśnienie niż poprawka.
Sean Middleditch
1
Nie głosowałem za sobą, ale innym powodem, dla którego ta odpowiedź jest nieodpowiednia, jest to, że używasz silnika opartego na OpenGL, a nie surowego OpenGL, który bardzo wszystko zmienia.
w4etwetewtwet 17.07.13