Od pewnego czasu uczę się programowania grafiki przy użyciu OpenGL i Linuksa. Jestem zaznajomiony z większością pojęć, ale naprawdę chciałbym pogłębić swoją wiedzę i ostatecznie kontynuować karierę w tworzeniu gier, szczególnie w tworzeniu silników gier.
Do tej pory wydaje mi się, że większość studiów gier tworzy gry dla systemu Windows przy użyciu DirectX.
Edycja: Wiem, że pytanie OpenGL vs. DirectX było już tutaj zadawane, ale nie znalazłem odpowiedzi w perspektywie, której chcę.
Edycja 2: Po przeczytaniu wszystkich odpowiedzi / komentarzy postanowiłem kontynuować nurkowanie głębiej w grafice za pomocą OpenGL / GLSL, ale postaram się również bawić z DX, tylko po to, aby mieć podstawową wiedzę na temat API. Chciałbym podziękować wszystkim za udzielone odpowiedzi i wgląd.
źródło
Odpowiedzi:
To naprawdę nie ma znaczenia. Podstawowe pojęcia są takie same w obu, szczególnie teraz, gdy shadery pikseli są normą. A ponieważ większość gier jest wieloplatformowych, prawdopodobnie będą korzystać z podzbioru funkcji, które są podobne w obu językach. Tak długo, jak możesz pisać shadery w glsl lub hlsl, nic ci nie będzie.
Biorąc to pod uwagę, liczba dostępnych miejsc do „tworzenia silnika gry” jest niewielka. Większość firm używa czegoś z półki. Dla tych pozycji, które istnieją, jeszcze mniej jest na poziomie podstawowym. Większość programistów gier podstawowych nie pisze kodu związanego z grafiką (oprócz być może shaderów), ponieważ wszystko to zostało wyabstrahowane.
źródło
Wszystko zależy od pracy, którą chcesz / dostaniesz. Prawdopodobnie myślisz o pracy na rynku komputerów PC, gdzie DX jest królem. Pamiętaj tylko, że większość firm AAA dąży do rynku konsoli, gdzie interfejsy API są dość specyficzne.
Na przykład PS3 ma zastrzeżone rozszerzenia implementacji OpenGL ES.
OpenGL rozwija się w mobilnej przestrzeni. Teraz jest dostępny na wszystkich nowoczesnych platformach, ale Windows Phone 7.
Obecnie w tej przestrzeni dostępny jest tylko OpenGL ES. Ale nadchodzą kolejne potężne układy PowerVR ze wsparciem dla OpenGL 4 i DX11.
Twoje umiejętności OpenGL są złote. Możesz przełączyć się na DX, aby znaleźć zadanie, które tego wymaga. Tymczasem pamiętaj, że OpenGL jest królem pod względem liczby urządzeń i platform, na których jest on dostępny.
Edycja : Ponadto coraz więcej firm korzysta z istniejących silników, a często nawet główni twórcy gier są coraz bardziej chronieni przed interfejsami API niskiego poziomu. Zawsze lepiej jest mieć dobrą znajomość natywnych interfejsów API, gdy masz do czynienia z błędami i dziwnymi zachowaniami na określonych platformach. Ale wszystko sprowadza się do pojęć, a jak zauważyli inni, DX i OpenGL w istocie będą wymagać znajomości tych samych pojęć.
Edycja : Ponieważ znasz już OpenGL i prawdopodobnie shadery, powinieneś wypróbować OpenCL ... Ten interfejs API może stać się kolejną wielką rzeczą w obliczeniach równoległych.
Wspominam o tym, ponieważ jądra OpenCL używają typów danych, które są interoperacyjne z OpenGL i są łatwe do zrozumienia dla deweloperów OpenGL. Spójrz na to i sprawdź, czy możesz zdobyć doświadczenie dzięki świetnemu ogólnemu rozwiązaniu komputerowemu (obecnie na przykład zintegrowanemu z fizyką pocisków ).
źródło
Zgadzam się, że tak naprawdę nie ma znaczenia, którego API się uczysz. Ważne jest, aby znać podstawowe pojęcia.
Jeśli chodzi o tworzenie gier, Windows nie jest jedyną platformą docelową. Jak słyszałem, Apple rozwija się jako platforma docelowa, ale konsole są również bardzo ważne. Konsole zwykle mają własne wyspecjalizowane API graficzne (myślę, że robią to po to, by nam przeszkadzać). Chociaż interfejsy API konsoli mają zwykle więcej wspólnego z OpenGL niż z DirectX, nadal nie jest to duża różnica.
Idź z tym, co Ci odpowiada.
źródło
A co z perspektywą profesora gier?
Jeśli masz podstawy OpenGL, to WSZYSTKO oznacza zapuszczenie się w świat DirectX (uwaga w DX), że Dx9 jest nadal używany w rozwoju ze względu na kompatybilność, ponieważ starsze platformy (szczególnie XP) nie obsługują nowszej grafiki potok w Dx10 i Dx11. (należy to przeczytać jako zalecenie rozpoczęcia w Dx9, a następnie zauważenia różnic w Dx10, a następnie 11 w miarę postępu). To również sprawi, że będziesz bardziej zaokrąglony.
Najlepiej będzie spędzić trochę czasu w HLSL i CG (zauważ, że te dwa pozornie różne języki modułu cieniującego są w rzeczywistości tym samym językiem (jeden jest oznaczony marką Microsoft, a drugi przez Nvidię), rozumiejąc, jak działają moduły cieniujące wierzchołki i fragmenty (piksele) bądź ogromnym atutem dla ciebie i każdej firmy, dla której idziesz do pracy (zakładając, że pracujesz nad renderowaniem systemów lub podsystemów, a nie kodem AI. ;-)
Ogre3D to silnik renderujący typu open source, który obsługuje oba podsystemy graficzne (OpenGL / DirectX) i jest używany w wielu grach ... ponieważ źródło jest dostępne za darmo, możesz go przeglądać i porównywać, w jaki sposób wywołania OpenGL różnią się od wywołań DirectX.
Poleciłbym to również, ponieważ spędziłeś już trochę czasu w OpenGL, że zaczepiasz się o WebGL, który wygląda na to, że wkrótce wybuchnie.
Mam nadzieję, że to pomoże!
źródło
Niedawno przeczytałem, że John Carmack zaleca DirectX ze względu na prosty fakt, że Microsoft przez jakiś czas grał nadrabiając zaległości w openGL i robiąc to, stworzyli konkurencyjny produkt i przesunęli kopertę, podczas gdy ludzie openGL spędzili czas na kłótni i tworzeniu projektu przez komitet, pozwalając DirectX zostać dopracowanym i, jak sądzę, łatwiejszym w obsłudze, ale pozostającym przy OpenGL.
http://www.tomshardware.com/news/john-Carmack-DirectX-OpenGL-API-Doom,12372.html
Być może inną opcją do rozważenia, jeśli lubisz grafikę w ogóle, a do tego, co się martwi, dzieje się w przestrzeni osadzonej.
Pracuję w przestrzeni osadzonej, używając zarówno Linuksa, jak i WinCE. Byłem byłym architektem Ford SYNC (byłem tam przez 6 lat), a teraz pracuję nad GM CUE (odpowiedź GM na Ford SYNC). Ford SYNC nie korzysta z OpenGL ani DirectX. Zamiast tego Ford wybrał skrypt Flash & Action; co Flash robi pod maską Nie jestem pewien, ale jest powolny jak diabli; JD Powers dał jej słabą ocenę. GM CUE to wszystko Linux i openGL ES i chociaż GM CUE ma nowszy procesor iMX, wydajność animacji w openGL na Linuksie jest oszałamiająca. CUE / openGL jest znacznie szybszy. Ponownie Ford uszkodził swój system za pomocą Adobe Flash.
Tak więc, jeśli chcesz zrobić to w grach, ale martwisz się konkurencyjnym charakterem, ale nadal lubisz tego rodzaju pracę, może spójrz na opcje, które poszerzą twoje CV. Z mojego doświadczenia wynika, że przynajmniej w świecie osadzonym WinCE nie używa aż tak dużo DirectX. (WinCE ma nieco inny interfejs API niż NT może być częścią tego powodu). OpenGL jest wszędzie we wbudowanym świecie, a ludzie robią więcej rzeczy, takich jak tablety, samochodowe systemy informacyjno-rozrywkowe są teraz gorące i oczywiście smartfony ...
źródło
Powiedziałbym, że prawdopodobnie w twoim życiorysie dobrze jest powiedzieć, że pracowałeś z oboma, bez względu na to, w czym się specjalizowałeś.
Mówię to, ponieważ, podobnie jak w przypadku innych elementów, chodzi bardziej o ogólne techniki niż znajomość interfejsu API / składni. Musisz być w stanie robić różne rzeczy i znać swoją drogę, ale nie musisz implementować ogromnych rzeczy w obu API: s. (To O (n * m), które nie jest skalowane ...). Trochę znajomość interfejsów API i znajomość różnych technik (tj. O (n + m)) działa i będzie pomocna.
Oczywiście, zdobędziesz bonusy za zrobienie czegoś „zaawansowanego” również w DX, ponieważ pokazuje to, że masz głębszą wiedzę na temat API, ale potrzebujesz pewnych zaawansowanych technik, aby udowodnić, że wiesz, jak należy połączyć te skrzynki (ignorowanie konkretne magiczne słowa, które musisz powiedzieć, aby to zrobić).
Tak samo jest z dowolnym interfejsem API (3d lub innym) lub dowolnym językiem programowania.
źródło
Przekonałem się, że DirectX jest trudniejszy do nauczenia się i dlatego jest lepszą umiejętnością. Directx zwykle ma lepsze wsparcie od producentów płyt, jednak Microsoft nie wydaje wielu aktualizacji, aby skorzystać z tych ulepszeń (i tylko wybrana subpopulacja graczy naprawdę korzysta z tych płyt). Jeśli chodzi o tworzenie gier, wszystkie główne platformy gier używają własnych, zastrzeżonych silników graficznych ... xbox -> DirectX Box :) Znajomość koncepcji 3D, siatek, oświetlenia, transformacji itp. To umiejętność, która jest taka sama dla nich wszystkich.
źródło
Jeśli znasz jeden, możesz łatwo podnieść drugi.
Jeśli znasz OpenGL, możesz łatwo programować na smartfony (Android i iPhone) oraz Win / Linux / Mac.
DirectX to tylko Win / Xbox. Więc jeśli nie chcesz atakować Xboxa, powiedziałbym, że zostań przy OpenGL, ponieważ może on kierować reklamy na więcej platform.
źródło
Wolę OPENGL. Rozważmy na przykład Androida, system operacyjny dla urządzeń mobilnych korzysta z OPENGL. Jest tak wiele silników gier, które zostały opracowane w oparciu o platformę OPENGL.
źródło