Czy powinienem nauczyć się Direct3D 9, 10 czy 11? [Zamknięte]


14

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ć?


Pytania „Której technologii użyć” nie są dobrymi pytaniami Q / A.
MichaelHouse

Odpowiedzi:


12

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 .


Dlaczego usunęli ramkę efektów? To była bardzo przydatna klasa IMO.
dotminic

@__dominic: Nie jest usuwany, ale musisz go samodzielnie skompilować.
DeadMG

1
@__dominic: Jak zauważył DeadMG, struktura efektów nie została usunięta, została uwzględniona w samodzielnym zestawie plików kodu, które można samodzielnie skompilować - rzekomo zrobiono to, aby umożliwić płynniejszą wersję niż rdzeń D3D, oraz ułatwiać problemy z wdrażaniem (szczególnie w D3DX).

1
Myślę, że gorzej niż wycinanie 25% użytkowników XP jest to, że tylko 17% ma procesory graficzne DX11 (na razie).
DMan

2
@DMan: D3D11 może działać na sprzęcie niższego poziomu, w tym na sprzęcie D3D9.
DeadMG

9

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.


3

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.


2

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.


3
DX9 nie jest przestarzały. Wciąż jest mnóstwo potencjalnych użytkowników na XP. Być może nie będzie już w fazie rozwoju i w ciągu kilku najbliższych lat stanie się przestarzały, ale na razie tak nie jest.
Kaczka komunistyczna

1
@ Thecommunistduck Zgadzam się, ale DX9 jest całkowicie przestarzały do ​​nauki. Ponieważ raz początkujący, który zacznie się go teraz uczyć, będzie dobrze wiedział ... będzie przestarzały. I na pewno powiedziałem to źle w mojej odpowiedzi.
Notabene

-5

Słyszałem, że dx9 z systemem win xp jest systemem opartym na jednym rdzeniu. To stara technika. Polecam dx11.


3
Ta odpowiedź nie dodaje niczego produktywnego i nie jest jasne (i potencjalnie złe i wprowadzające w błąd) to, co sugerujesz w odniesieniu do „systemu jednordzeniowego”.

1
Dodatkowo „Słyszałem, że ...” nie jest wiarygodnym źródłem dowodów (a właściwie cokolwiek, naprawdę).
Maximus Minimus
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.