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?
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?
Odpowiedzi:
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:
(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
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:
To tylko kilka zalet, które pochodzą z czubka mojej głowy. Sądzę, że jest jeszcze kilka innych.
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.
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ć.
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.