Zaczynam się zajmować programowaniem 3D z Direct3D. Którą wersję D3D powinienem pobrać?
11 wygląda całkiem nieźle, ale 9 i 10 nadal wydają się dość obecne. Biorąc pod uwagę obecny stan branży gier, z której wersji lepiej zacząć korzystać?
Zaczynam się zajmować programowaniem 3D z Direct3D. Którą wersję D3D powinienem pobrać?
11 wygląda całkiem nieźle, ale 9 i 10 nadal wydają się dość obecne. Biorąc pod uwagę obecny stan branży gier, z której wersji lepiej zacząć korzystać?
Odpowiedzi:
Zależy to od tego, czy chcesz zaprojektować silnik do produkcji gry za trzy lata, rok czy sześć miesięcy, a także od tego, czy myślisz o portach konsoli. Wyrzucenie portu 360 gry z Direct3D9 będzie stosunkowo łatwe, ale musisz zrobić znacznie więcej, pochodząc z D3D11. Pamiętaj, że D3D11 blokuje wszystkich użytkowników XP, jeśli nie koniecznie cały sprzęt D3D9.
Najnowsza ankieta Steam sugeruje, że około 16% osób nadal korzysta z systemu Windows XP. Czy możesz sobie pozwolić na ich wycięcie? Jak to się zmieni, zanim Twoja gra się zakończy? Czy zamierzasz korzystać z funkcji zależnych od interfejsu API wyższego poziomu? To są pytania, na które będziesz musiał odpowiedzieć sam.
Direct3D 9 jest dość cholernie dostępny i możesz dotrzeć do wielu osób dzięki grze D3D9, ale jego dni są policzone, szczególnie na PC. Jeśli nie chcesz celować w te osoby, nie ma to większego sensu.
Aha, i nie przejmuj się DX10. Nie ma żadnego powodu, aby używać go w DX11. Chyba że chcesz użyć D2D / DirectWrite, co nie jest nierozsądne.
Oczywiście warto wspomnieć, że w DX11 nie ma zamienników dla klas, które jako hobbysta uważam za bardzo przydatne w DX9. Takie jak ID3DXMesh, ID3DXSprite, ID3DXFont, muszą skompilować ID3DXEffect ze źródła itp. Microsoft zaleca DirectWrite zastąpić ID3DXFont, ale oczywiście zapomnieli oni faktycznie uczynić DX11 kompatybilnym z nowymi systemami Direct2D / DirectWrite, co moim zdaniem było wręcz głupie .
tldr: Naucz się D3D11.
Różnica między 10 a 11 jest dość mała, jeśli chodzi o kształt API. D3D11 pozwala używać obniżania poziomu do pisania kodu na interfejsie API D3D11, który będzie działał aż do sprzętu klasy D3D9 (pamiętaj jednak, że nadal będziesz potrzebować Visty lub lepszej wersji). Możesz więc równie dobrze nauczyć się nowszego API, które wydaje mi się czystsze i bardziej jednolite.
Jeśli jednak nie masz systemu Vista lub nowszego, lub w końcu chcesz, aby Twój własny kod działał na XP (na przykład, aby rozpowszechniać grę wśród użytkowników XP), będziesz musiał użyć D3D9. Rynek XP prawdopodobnie maleje, więc powiedziałbym, że idź na 11, jeśli możesz.
Jeśli jesteś zupełnie nowy w programowaniu 3D, a zwłaszcza jeśli jesteś nowy w programowaniu COM i Windows, zdecydowanie odradzam uczenie się DirectX teraz. Z mojego doświadczenia wynika, że DirectX jest niezwykle potężnym narzędziem, ale ma bardzo stromą krzywą uczenia się, którą należy wziąć pod uwagę oprócz krzywych uczenia się programowania Windows, programowania 3D i wielu innych. Jeśli zaczniesz od DirectX, możesz czuć się przytłoczony wszystkimi szczegółami tworzenia kodu z podstawowymi kodami, więc odradzam to.
Zamiast tego poleciłbym prostszy interfejs API, który pozwala bardziej skoncentrować się na nauce programowania 3D. XNA jest całkiem fajny, a ponieważ leży on na DirectX, po przejściu na DirectX masz kilka pomysłów, które znacznie ułatwią przyjęcie krzywej uczenia się DirectX.
Teraz, jeśli masz doświadczenie w programowaniu 3D, takie jak OpenGL, i wiesz, jak robić programowanie COM, poleciłbym DirectX 11. Cokolwiek poza najnowszą wersją jest przestarzałe, a wszelkie doświadczenia z niego przydatne będą przydatne krótszy okres czasu.
Ale z drugiej strony prawdziwe wrażenia pochodzą z różnorodności, więc polecam nauczyć się zarówno DirectX i OpenGL, a także XNA, jeśli chcesz, i jak najwięcej interfejsów API, jak możesz. W ten sposób uzyskasz abstrakcyjną wiedzę o tym, jak programowanie 3D działa z różnymi narzędziami, i będziesz mógł używać odpowiedniego narzędzia do każdego zadania.
Polecam DX11 lub DX10. Różnica jest bardzo mała. Możesz po prostu robić więcej rzeczy z DX11 (hw tessalation, lepszy gpgpu, wyjście do wielu tekstur na module cieniującym piksele ...). DirectX 9 ma inną architekturę i jest w tej chwili trochę przestarzały. Jeśli pytasz o aktualną branżę deweloperów gier: dla aktualnie opracowanych gier na PC jest DX9 martwy.
Ale muszę powiedzieć:
nie przejmuj się interfejsem API , gdy naprawdę zrozumiesz, jak działa grafika, nauka nowego interfejsu zajmie maksymalnie miesiąc. Jeszcze krótszy czas.
Słyszałem, że dx9 z systemem win xp jest systemem opartym na jednym rdzeniu. To stara technika. Polecam dx11.