Jestem samoukiem w C ++ bez formalnego wykształcenia i przez ostatnie 15 lat nauczyłem się zarówno OpenGL 1.0, jak i Modern OpenGL oraz DirectX 9c, 10 i 11. Nie dostałem się do DirectX 12 i chciałem spróbuj swoich sił w Vulkan. Ukończyłem tylko kilka podstawowych samouczków, aby narysować prosty trójkąt lub prostą wirującą kostkę za pomocą Vulkanu. Podobnie jak w przypadku DirectX 11 i OpenGL 3.3+, napisałem w pełni działające silniki gier 3D, a nawet używałem ich do tworzenia prostych gier.
Chciałbym powiedzieć, że zależy to od ogólnego środowiska osoby uczącej się. Jeśli dopiero zaczynasz programować grafikę 3D, powiem, że dla początkujących wskocz do OpenGL lub DirectX 11, ponieważ istnieje wiele samouczków, zasobów, przykładów i już działających aplikacji. Nauka grafiki 3D nie jest łatwym przedmiotem.
Jeśli oderwamy się od jego programowania i skupimy się na pojęciu, jakie techniki są stosowane z uwzględnieniem różnych poziomów matematyki prowadzących do zbiorów danych oraz struktur i algorytmów danych; jest wiele rzeczy, które musisz najpierw zrozumieć i zrozumieć, zanim będziesz mógł spróbować zbudować silnik gry 3D lub efektywnie wykorzystać istniejący.
Teraz, jeśli rozumiesz już całą matematykę i teorię, i masz doświadczenie w programowaniu, możesz użyć już istniejących interfejsów API, bibliotek i aplikacji, takich jak Unity lub Unreal Engine, i po prostu napisać kod źródłowy i skrypty potrzebne do działania aplikacji. .
Tak więc z mojego własnego zrozumienia i tego, co widzę, jest tak, jeśli chcesz zbudować szybką grę tylko ze względu na zbudowanie gry; przejdź do już istniejących prac ramowych, które znacznie skróciłyby Twój czas produkcji. Z drugiej strony, jeśli chcesz zrozumieć wewnętrzne zasady projektowania Silników do gier / Silników fizycznych / Silników animacyjnych i symulatorów i chcesz samodzielnie je zbudować, możesz wybrać między takim interfejsem API, jak DirectX, OpenGL lub Vulkan. Jednym z czynników decydujących w tym przypadku byłaby również twoja wiedza programistyczna. Mam na myśli to, że nie wiesz nic o połączeniach wielowątkowych, połączeniach synchronicznych i asynchronicznych, płotach pamięci, wyścigach danych, semaforach i równoległości (programowanie równoległe),
Wspominam o tym, ponieważ jeśli nie wiesz, jak właściwie zarządzać pamięcią wraz z wątkami i czasem dostępu; Vulkan ugryzie cię w tyłek! Gdzie OpenGL i DirectX utrzymają Twoją rękę przez cały czas, zużywając znacznie więcej mocy procesora.
Teraz, jeśli Twój poziom wiedzy programistycznej jest przyzwoity i masz następujące podstawy matematyczne, które obejmują wszystkie poziomy Algebry, Geometrii, Trygonometrii, Algebry Boolean, Prawdopodobieństwo, Statystyka, Wektor - Algebra oparta na Matrycy, Rachunek I, II, ... Infinty (lol). Rachunek wektorowy, Algebra liniowa, Układy równań liniowych, Geometria analityczna z Rachunkiem wektorowym obliczeń wielozmiennych, Teoria liczb i zbiorów, Zbiory i struktury danych, Analiza obliczeniowa, Obliczanie i projektowanie algorytmiczne. Następnie możesz zapoznać się z koncepcjami potrzebnymi do stworzenia rzeczywistego silnika gry, i to bez żadnych zastosowanych matematyki ani równań fizyki, których potrzebujesz. Gdy zdobędziesz to doświadczenie i wystarczająco dużo doświadczenia programistycznego, zwłaszcza zarządzania pamięcią i arytmetyki wskaźników, możesz zacząć budować silnik gry.
Rzecz w tym, że musisz zrozumieć wszystkie aspekty niezbędne do stworzenia silnika gry, aby wykonać zaawansowane programowanie graficzne. Jeśli robisz tylko grafikę 2D, życie nie jest zbyt trudne, ponieważ możesz to zrobić w Pythonie bez żadnego z wyżej wymienionych interfejsów API! Ale jeśli chcesz być poważny i zaprojektować pełnoprawny, potężny silnik gry, który jest solidny z wieloma zestawami funkcji, wybierz tutaj C lub C ++ i używając OpenGL, Direct X lub Vulkan. Każdy z nich byłby w porządku. Teraz, jeśli budujesz silnik od zera i szukasz najbardziej „wydajnego” działającego silnika z najmniejszym narzutem zasobów, powinieneś wybrać Vulkan. Ale jeśli pójdziesz tą drogą, powinieneś przynajmniej wiedzieć wszystko, o czym wspomniałem powyżej i niektóre!
Jak widać, Vulkan nie jest tak naprawdę nastawiony na początkujących programistów w tej dziedzinie. Musisz mieć rozległą wiedzę na temat całej matematyki, paradygmatów programowania, wszystkich różnych rodzajów zestawów danych i algorytmów, w tym wątków, synchronizacji pamięci, programowania równoległego. I nawet wtedy to wystarczy, aby aplikacja załadowała prosty trójkąt 2D na ekran. Co można zrobić w około 100 liniach kodu w OpenGL lub 250 liniach kodu w DirectX, zajmuje prawie 1000 linii kodu w Vulkan!
Vulkan pozostawia wszystko Tobie, ponieważ jesteś odpowiedzialny za wszystkie aspekty korzystania z Vulkan w swojej aplikacji. Nie ma ręki trzymającej, nie przeszkadza, pozwoli ci zastrzelić się w stopę lub powiesić rekurencyjną pętlę!
Nie oznacza to, że początkujący lub nowicjusze w tej dziedzinie nie powinni uczyć się wulkanu, ale sugeruję im to: Najpierw naucz się OpenGL i DirectX, aby zmoczyć stopy, aby zobaczyć, jak Podstawowa aplikacja jest zbudowana tak, aby renderować prosty trójkąt lub wirujący sześcian. Zapoznaj się z ich interfejsami API i powtarzającymi się wzorcami ich struktur. Ucząc się, że możesz uczyć się wulkanu równolegle w Parallel, w ten sposób możesz zobaczyć, jak każda z tych trzech osób wykonuje to samo zadanie, ale wiedzieć, jak robią to inaczej, możesz również porównać wyniki między różnymi interfejsami API i z tam możesz następnie wybrać, który z nich jest dla ciebie preferowany. Ta metoda dałaby Ci także inne narzędzie w skrzynce z narzędziami. Możesz nawet napisać aplikację obsługującą wszystkie 3 i mieć „
Ostatecznie to osoba decyduje o tym, którą drogą chce zejść, a stamtąd ich sukces będzie zależał od ich poświęcenia, ciągłych studiów, ciężkiej pracy, prób i błędów, a przede wszystkim od ich niepowodzeń. Jeśli nie zawiedziesz, to nie odniesiesz sukcesu! Odnosisz sukces tylko wtedy, gdy poniosłeś porażkę, znalazłeś swój błąd (błędy), naprawiłeś je, przeniosłeś się i wróciłeś i zrobił to wszystko od nowa!