DirectX czy OpenGL?
Mając dzisiaj chwilę wolnego czasu wpadłem na pomysł, aby zacząć uczyć się programowania pełnowartościowych aplikacji i gier. Od razu poszedłem do Pana Gugle po informacje. Sprawa okazała się dość skomplikowana, gdyż ujawnił się problem z jakiej biblioteki korzystać: DirectX czy OpenGL?
Dlatego postanowiłem zapytać się joggerowiczów jaki wybór mi polecicie. Z programowaniem grafiki nie miałem wcześniej do czynienia. Znam na średnim poziomie C++, jednak samo pojęcie programowania nie jest mi obce, ponieważ dość dobrze operuję kilkoma innymi językami. Chcę także, aby dostępna była w sprzedaży jakaś dobra książka o danej bibliotece - taka, po przeczytaniu której będę mógł stworzyć w pełni sprawną aplikację na średnim(a jeszcze lepiej wysokim)poziomie zaawansowania.
P.S. Jeszcze jedno. Nie chcę kłótni o tym, czy lepszy jest OGL, czy DX, bo już się tego sporo naczytałem w internecie
28 komentarzy
DX -- ograniczysz się tylko do Windowsa. OpenGL -- pełna przenośność grafiki, możesz więc programować pod Unixami. OpenGL jest prostszy niż DX; żeby w DX otworzyć okienko trzeba się sporo naklepać, a w OpenGL służy do tego bardzo prosta w obsłudze biblioteka GLUT, za pomocą której w kilka linii mamy okno+obsługa. Dla mnie był to główny powód, dla którego zacząłem się uczyć OGL, nie miałem ochoty przebijać się przez dziesiątki linii kodu, które powodują wygenerowanie pustego okienka itp.
DX zapewnia obsługę peryferiów, OpenGL jest tylko do grafiki. Oczywiście nic nie stoi na przeszkodzie by programować grafikę w OGL, a klawiaturę, mychę, dźwięk, sieć i co tam jeszcze w DX -- ale taka aplikacja nie będzie przenośna.
OGL ma wiele tutoriali, w tym doskonałe Nehe Tutorials. Książek na polskim rynku nie ma dobrych ani do DX, ani do OGL. Do OGL łatwiej też o pomoc w Usenecie.
Ja bym wybrał OGL.
Aha, jeszcze jedno. OpenGL można łatwo łączyć z takimi bibliotekami graficznymi jak SDL czy Allegro (np. projekt AllegroGL -- mamy wtedy pełen dostęp do peryferiów).
OpenGL. DirectX ogranicza do Winshitu jak już wyżej wspomniano.
Polecam lekturę: http://wiki.gamedev.pl/DirectX_vs_OpenGL
Ogólnie DirectX, zanim nie ukaże się OGL 3.0 (uwaga - będzie obsługiwane inaczej), pozwala zwyczajnie osiągnąć więcej (mówię oczywiście o DX 10), za to OGL jest przenośny (na systemy bazujące na Unixie).
Przeanalizuj za i przeciw i wybierz co dla Ciebie będzie lepsze - ja powiem tylko, że IMO OpenGL jest prostszy do nauki.
Ja bym wybrał OpenGL + coś w stylu SDL. Nie wiem czy SDL jest najlepsze, ale na pewno bardzo popularne :)
Najlepiej to chyba jednak SDL-a — jest najbardziej przenośny.
Allegro też jest przenośne.
Allegro kojarzy mi się głównie z DOS-em. SDL + OGL wygodne, przenośne i bardzo dobrze opisane. ;)
Hej hej, ale Allegro i SDL to biblioteki strict 2D, i chociaż można je łączyć z OpenGL, to do grafiki 3D bym takiego rozwiązania nie polecał - zostało to utworzone na potrzeby dwóch wymiarów i nie jest najlepsze do innych rozwiązań :)
celów*. Wybaczcie pomyłkę.
Nie chodzi o wykorzystanie Allegro czy SDL w grafice 2D, bo do tego OpenGL również się nadaję, ale o wykorzystanie do obsługi klawiatury, myszy, dźwięku etc.
SDL wykorzystuje się głównie do wspierania OGL-a jako bibliotekę łączącą kontekst 3D lub 2D (z akceleracją, której brak samemu SDL-owi) z okienkami i IMO robi to bardzo dobrze.
ein: Goły OpenGL nie nadaje się do grafiki 2D ze względów wydajnościowych :P A pytanie było tylko i wyłącznie o obsłudze grafiki, więc na to też odpowiadam.
Sebas86: Ale to nie kwestia nauki, SDL można wykorzystać w jakimś etapie nauki np do GUI, ale początkowo OGL może do tego wystarczyć (przyznaję, że na dłuższą metę pewne "wspomagacze" 2D mogą być potrzebne, ale teraz nie mieszajmy).
Sęk w tym, że nauka bez praktyki nie jest najlepszym sposobem, a gołym OGL-em nie wiele zdziałamy, tak czy siak trzeba się posiłkować czymś dodatkowym, a SDL wydaje (mi) się jednym z wygodniejszych rozwiązań.
Czemu OGL nie nadaje się do grafiki 2D?
"Nauka bez praktyki"? Gołym OpenGLem zdziałamy wszystko co potrzebne w projektach 3D i żadne SDL/Allegro nie jest do szczęścia potrzebne.
Do samej grafiki 2D jest po prostu mniej wydajne niż kombajn grafika strict 2D + akceleracja.
Nie wiem czy czegoś nie doczytałem ale sam OGL zajmuje się tylko i wyłącznie renderingiem. Więc potrzebne jest coś jeszcze choćby GLUT. Jak dla mnie dobrą analogią są stosowana kiedyś kombinacja akcelerator + karta graficzna, sam akcelerator nie pozwalał wyświetlać obrazu...
edit: tfu, pozwalał tylko na wyświetlanie obrazu 3D.
Nie jestem do końca na czasie, ale z tego co słyszałem z rok czy dwa temu komercyjnych poważnych gier z użyciem OpenGL piszę się coraz mniej. Patrząc więc na zawodową pożyteczność zdobytej wiedzy, wygrywa DirectX. Pozatym, to jest pełen rozbudowany stack do robienia gier, łącznie z obsługą urządzeń wejścia/wyjścia (także np. kierownic i joysticków), dźwięku itp, czego OpenGL nie oferuje. Jest kupa książek, MSDN dostarcza dokumentacji bardzo dobrej jakości itp. Jeśli ktoś myśli poważnie o pisaniu gier, to właściwie jedyna poważna opcja, sorry folks.
Inna sprawa, że do nauki świetnie przez całkiem długi czas wystarczy pewnie coś co zainicjalizuje jakiś canvas i pozwoli zrobić putpixela ;d
@sztywny: sugerujesz że Quake Wars, Quake 4, wszystkie części Unreal Tournament, Doom 3 to nie są poważne komercyjne gry? Dziwne, bo wydawało mi się, że dzieje się wręcz odwrotnie - wszyscy producenci którzy mają choć trochę oleju w głowie mają świadomość, że Windows niedługo straci monopol i łapią się wszystkiego żeby ich produkty były wieloplatformowe. Valve (którego system Steam wykorzystuje wiele gier - nie tylko te, wyprodukowane przez nich) poszukuje obecnie programistów którzy zajęli by się portowaniem gier na Linuksa. Patrząc więc na zawodową pożyteczność zdobytej wiedzy, trzeba potrafić przewidywać, a w obecnej chwili trzeba być naiwnym do granic możliwości myśląc, że M$ utrzyma swój monopol. Za 5-10 lat nikt nie będzie robił gier czy aplikacji tylko pod Win, przez co M$ będzie musiał pomyśleć o użyciu jakichś otwartych standardów. Co więcej - kolejna wersja Windozy prawdopodobnie będzie jeszcze mniej kompatybilna z poprzednimi niż Vista i istnieje wielkie prawdopodobieństwo, że jądro będzie jakimś klonem Unixa.
1. Jeśli chodzi o platformę do gier na komputery osobiste, Windows nie ma na razie zupełnie żadnej realnej konkurencji.
2. Quake 4 i Unreal Tournament pod Windows korzystają z DirectX (jeśli nawet nie do grafiki, to do masy innych rzeczy vide wspomniana unifikacja obsługi urządzeń we/wy, engine renderujący jest chyba do wyboru)
3. Nie interesują mnie proroctwa, mówie o tendencji w ostatnich latach.
4. Zfocusowanie na Windows + DirectX nie przeszkadza wieloplatformowości, jeśli komuś naprawdę na tym zależy, na razie nie specjalnie się to chyba opłaca (komercyjnie).
W ramach prostego testu, proponuje zainstalować Windows 98 albo XP z usuniętym DirectX (_chyba_ się da) i spróbować odpalić jakąkolwiek w miarę nową gre. EOT, bo zaraz się flejm z tego zrobi.
@sztywny: rozwiń proszę pierwszą część zdania z punktu 4 (do drugiego przecinka), bo teraz to mnie autentycznie zainteresowałeś...
Nie, DirectX nie jest przenośny między platformami ;) Po prostu przy poważnym projekcie nikt nie będzie programował mieszając logikę / właściwy kod gry z wywołaniami API specyficznych dla danego systemu. Można więc wybudować jakąś warstwę abstrakcji nad tymi różnymi rozwiązaniami i w inny sposób budować projekt pod różnymi platformami. Taki styl zresztą i tak jest wymagany, większość gier wychodzi też od razu na różne konsole, z których niektóre nie wspierają chyba ani OpenGL ani DirectX.
No, tylko wtedy nie mówimy już o nastawieniu na konkretną platformę, ale piszemy od razu aplikację wieloplatformową.
Miałem na myśli nastawienie w sensie komercyjnym - do portów Macowych czy Linuxowych firmy przywiązują siłą rzeczy mniejszą uwagę, bo korzysta z nich bardzo mały procent użytkowników.
Ok, dzięki za wszystkie komentarze. Chyba jednak zdecyduję się na OGL. Widzę w nim przyszłość, zwłaszcza że niedługo zamierzam przesiąść się na komputer spod znaku jabłka. Jeszcze jakbym mógł prosić o jakieś godne polecenia tutki i kursy, żeby nie tracić czasu na przeglądanie tych, które mają większej wartości edukacyjnej.
Każdy OGLowiec poleci Ci przede wszystkim tę stronę: http://nehe.gamedev.net/.
Jeszcze jedno. Ja pierwsze kroki w OpenGL stawiałem po przeczytaniu tych tutoriali: http://mindfuck.de-brauwer.be/articles.php . Nehe jakoś na początku mnie odstraszył. Przeczytaj te, a potem weź się za Nehe. :)
Bardzo dużo osób polecały ten zbiór tutoriali "Od zera do gier kodera":
http://www.gamedev.pl/tutorials.php
Dziękuję za wszystkie linki. Od jutra zabieram się za studiowanie przykładów aplikacji OGL :)