27 Paź

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

Komentarze

  1. 27 Paź 2007 | #

    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.

  2. 27 Paź 2007 | #

    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).

  3. 27 Paź 2007 | #

    OpenGL. DirectX ogranicza do Winshitu jak już wyżej wspomniano.

  4. 27 Paź 2007 | #

    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.

  5. 27 Paź 2007 | #

    Ja bym wybrał OpenGL + coś w stylu SDL. Nie wiem czy SDL jest najlepsze, ale na pewno bardzo popularne :)

  6. Michał Górny
    27 Paź 2007 | #

    Najlepiej to chyba jednak SDL-a — jest najbardziej przenośny.

  7. 27 Paź 2007 | #

    Allegro też jest przenośne.

  8. 27 Paź 2007 | #

    Allegro kojarzy mi się głównie z DOS-em. SDL + OGL wygodne, przenośne i bardzo dobrze opisane. ;)

  9. 27 Paź 2007 | #

    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ń :)

  10. 27 Paź 2007 | #

    celów*. Wybaczcie pomyłkę.

  11. 27 Paź 2007 | #

    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.

  12. 27 Paź 2007 | #

    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.

  13. 27 Paź 2007 | #

    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).

  14. 27 Paź 2007 | #

    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?

  15. 27 Paź 2007 | #

    "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.

  16. 27 Paź 2007 | #

    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.

  17. 28 Paź 2007 | #

    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

  18. 28 Paź 2007 | #

    @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.

  19. 28 Paź 2007 | #

    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.

  20. 28 Paź 2007 | #

    @sztywny: rozwiń proszę pierwszą część zdania z punktu 4 (do drugiego przecinka), bo teraz to mnie autentycznie zainteresowałeś...

  21. 28 Paź 2007 | #

    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.

  22. 28 Paź 2007 | #

    No, tylko wtedy nie mówimy już o nastawieniu na konkretną platformę, ale piszemy od razu aplikację wieloplatformową.

  23. 28 Paź 2007 | #

    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.

  24. 28 Paź 2007 | #

    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.

  25. 28 Paź 2007 | #

    Każdy OGLowiec poleci Ci przede wszystkim tę stronę: http://nehe.gamedev.net/.

  26. 28 Paź 2007 | #

    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. :)

  27. 28 Paź 2007 | #

    Bardzo dużo osób polecały ten zbiór tutoriali "Od zera do gier kodera":
    http://www.gamedev.pl/tutorials.php

  28. 28 Paź 2007 | #

    Dziękuję za wszystkie linki. Od jutra zabieram się za studiowanie przykładów aplikacji OGL :)

Napisz komentarz