Jakie są alternatywy dla GLUT?

12

Próbuję nauczyć się OpenGL i właśnie odkryłem, że GLUT jest przestarzały . Znam już SDL i wydaje się, że to dobra alternatywa. Czy powinienem używać SDL do tworzenia gier z OpenGL, czy też są jakieś lepsze alternatywy. Jestem nowy w tworzeniu gier, więc niewiele wiem o stanie techniki.

Mansuro
źródło

Odpowiedzi:

27

Właśnie dowiedziałem się, że GLUT jest przestarzały.

Tak się dzieje, gdy akceptujesz pierwszą odpowiedź, na którą się natkniesz; dostajesz złe informacje. GLUT 3.7 nie powinien być używany, ale FreeGLUT jest z nim całkowicie kompatybilny wstecz.

Twoje pytanie trafia jednak gdzie indziej. Przy tworzeniu rzeczywistej gry GLUT formy * jest nieodpowiedni. Nie daje ci kontroli nad główną pętlą, a naprawdę potrzebujesz tego w grze (FreeGLUT ma sposób kontrolowania głównej pętli, ale nadal jest dziwny). GLUT służy do pisania prezentacji graficznych. Jest to bardzo ważne podczas testowania nowych efektów graficznych, dlatego w razie potrzeby powinno się tam znajdować. Ale twój główny kod gry nigdy nie powinien go używać.

GLFW to lekka alternatywa dla GLUT ukierunkowana na grę. Zapewnia podstawową obsługę rzeczy poza tworzeniem okna OpenGL. Pozwala uzyskiwać dane wejściowe, ładować obrazy jako tekstury i kilka innych rzeczy.

SDL , SFML i Allegro 5 to multimedialne zestawy narzędzi. Mogą tworzyć okna OpenGL, ale robią o wiele więcej. Zapewniają pełne wsparcie dla wejścia, dźwięku i różnych innych rzeczy potrzebnych do stworzenia gry. Jeśli tworzysz grę, każdy z nich jest dobrym punktem wyjścia. Osobiście lubię Allegro 5, ale to tylko moja tendencja do dobrej dokumentacji i czystego API.

Nicol Bolas
źródło
1
Z czego korzystają tytuły AAA (zarówno na komputery PC, jak i na wiele platform)? Czy używają tych (GLFW, Allegro), o których wspomniałeś, do obsługi otwartego okna? czy piszą swoje „wszystko” od zera?
Quazi Irfan
@iamcreasy: „Tytuły AAA” (naprawdę nie znoszę tego terminu) nie używają żadnego z nich. Ogólnie rzecz biorąc, nie używają niczego typu open source. Mogliby, ale jeśli zamierzają korzystać z biblioteki, woleliby raczej korzystać z obsługiwanej biblioteki. Istnieją pewne wyjątki, takie jak ODL lub Bullet. Ale to raczej wyjątki niż reguła.
Nicol Bolas,
Od kiedy GLFW „ładuje obrazy jako tekstury”? Zdecydowanie nie ma go na liście funkcji; ani żadnych funkcji, które zdalnie służą temu celowi w moim nagłówku glfw.
spowolnił
1
Inną dużą wadą GLUT jest to, że jego model wejściowy nie jest szczególnie odpowiedni do gier; nie ma sposobu, aby uzyskać surowe kody klawiszy lub uzyskać zdarzenia naciśnięcia / zwolnienia na samych klawiszach modyfikujących (np. użycie ctrl jako przycisku ognia), ani nie ma sposobu na uzyskanie podstawowego kontekstu GL (który jest niezbędny, aby włączyć vsync na X11, na przykład).
puszysty
1
@NicolBolas ah, zapomniałem o 2.7, oni [wątki, obrazy] zostały uznane za „poza kontekstem” dla wydania GLFW 3.0.
spowolniłaviar
2

Jeśli Twoim celem jest opracowanie gry,

To zależy od tego, czy chcesz, aby Twoja gra była wieloplatformowa, czy nie. W przypadku gier przenośnych (Windows, Mac, Linux) SDL wydaje się jedynym wyborem.

Jeśli celujesz tylko w Windows i / lub XBox, istnieją o wiele lepsze alternatywy, np. XNA, który uwalnia cię od ręcznego pisania dużej ilości kodu.

Jeśli Twoim celem jest nauka OpenGL,

Po prostu programuj w surowym OpenGL, ale bądź przygotowany na wiele nieintuicyjnych koncepcji, matematyki i ogromnych instrukcji.

Mischa Arefiev
źródło
Jak powiedział Takumi, istnieje również SFML jako przenośna biblioteka. Lepsze niż SDL imho (jest bardziej aktualne.)
kaoD
8
-1: „W przypadku gier przenośnych (Windows, Mac, Linux) SDL wydaje się jedynym wyborem.” To nawet nie jest prawdą. SFML i Allegro 5 istnieją jako doskonale uzasadnione alternatywy i oba mają szersze podstawy platformy.
Nicol Bolas,
1

GLUT jest zarówno interfejsem API, jak i biblioteką. Oryginalna biblioteka jest rzeczywiście przestarzała. Interfejs API jest inny, na początek był całkiem dobry, potrzebuje tylko poprawek w celu przezwyciężenia ograniczeń i zaspokojenia nowych potrzeb. Podstawową bieżącą implementacją jest FreeGLUT, który jest obsługiwany i nie jest przestarzały. Oznacza to, że dobrą alternatywą dla GLUT (jak w bibliotece GLUT) jest GLUT (jak w FreeGLUT).

Wskazany powyżej problem z „kontrolą głównej pętli” jest nieprawidłowy. Dzięki nowszym wersjom GLUT możesz lepiej kontrolować swoją pętlę gry (jeśli jest to dla Ciebie ważne). Ograniczenie zostało naprawione przez glutMainLoopEvent (). To i inne ograniczenia są omówione tutaj:

http://en.wikipedia.org/wiki/OpenGL_Utility_Toolkit

Ingemar Ragnemalm
źródło
Dzięki nowszym wersjom GLUT możesz lepiej kontrolować swoją pętlę gry (jeśli jest to dla Ciebie ważne). ” To gra, więc tak , jest to dla Ciebie ważne. Ponadto, glutMainLoopEventnie jest to dobry sposób na zarządzanie główną pętlą. Nadal wykorzystuje model sterowany zdarzeniami do dostarczania danych, a nie model odpytywania, w którym dostajesz potrzebne dane, kiedy chcesz.
Nicol Bolas,
Muszę argumentować, że model sterowany zdarzeniami jest bardziej wydajny niż odpytywanie, chyba że odpytujesz dane przechowywane na podstawie zdarzeń (co jest w porządku). Zasoby systemu odpytywania powinny być wykonywane ostrożnie.
Ingemar Ragnemalm
0

Qt obsługuje OpenGL. Spójrz na Open Inventor i zastanów się, czy sensowne jest przejście bezpośrednio do wyższego poziomu interfejsu API 3D.

FxIII
źródło