Zacząłem pisać bardzo prosty silnik gry, aby lepiej nauczyć się OpenGL 3.x, ale ponieważ mój brak doświadczenia i niewielka wiedza na temat tego, jak powinna być zaprojektowana gra 3D, zwykle mam problemy, w których zdaję sobie sprawę, że powinienem zaprojektować swoje zajęcia różnie. Inne problemy, przed którymi stoję, to to, jak w zwięzły sposób śledzić czas i aktualizować ruch w razie potrzeby oraz jak powiedzieć rendererowi, że musi przerysować. Również ciągle muszę tworzyć funkcje Get i Set do przekazywania różnych flag z jednego obiektu do drugiego, czy to zła praktyka?
Tak więc, jak mówi tytuł, jestem zainteresowany wszelkimi książkami, artykułami / samouczkami i źródłem, które mogłyby mi pomóc i wyjaśniłyby niektóre typowe wzorce projektowe w projektowaniu gier (tj. Programy obsługi stanu gry, czcionki itp.).
Btw, nadal używam freeglut, czy poleciłbyś przejść do lepszego systemu okien przed przejściem dalej, czy po lepszym zrozumieniu OpenGL?
źródło
Odpowiedzi:
Napiszę właściwą odpowiedź, ponieważ byłem na twoim etapie około 2 miesięcy temu.
Nie martw się o to. Przy braku doświadczenia nigdy nie będziesz w stanie pomyśleć o wszystkich możliwościach i sposobach wykorzystania danej klasy w twoim silniku. Najlepiej, jeśli weźmiesz pod uwagę główne cechy klasy, wdrożysz ją i zrestrukturyzujesz później. Nie próbuj zbytnio zastanawiać, na tym etapie będziesz tracić czas. Moja pierwsza gra była kompletnym bałaganem, jestem pewien, że tak było w przypadku większości ludzi.
Potrzebujesz wiedzy na temat pętli gry. To dobre miejsce na początek. Gdy zaczniesz pisać bardziej skomplikowany kod, taki jak obsługa fizyki, możesz rozważyć pętle ze zmiennymi czasami klatek, ale zacznij od małych. Zwykła pętla do gry z ustaloną ramką powinna ci wystarczyć.
To jest raczej pytanie dotyczące inżynierii oprogramowania. Z czasem zobaczysz, które dane musisz chronić, a które są bezpieczne. Prawdopodobnie najlepiej, jeśli po prostu zaimplementujesz funkcję, a następnie zobaczysz to, co nie jest ujawnione poza nią i może być traktowane jako dane publiczne.
To wszystko kwestia doświadczenia. Napisz klasę kamery, a potem zobaczysz, jakiej funkcjonalności potrzebujesz od macierzy transformacji. Jeśli chcesz natychmiastowych wskazówek, muszę powiedzieć, wdrożyć gołe kości, przedłużyć później.
Artykuły i książki:
Te książki mówią o architekturze współczesnych silników gier i potoków. Zapewnią dobry przegląd technologii bazowej. Polecam pierwszą książkę, jeśli musisz wybrać, jest mniej „tendencyjna” w stosunku do niektórych technologii, choć ostatecznie prawdopodobnie chcesz przejść przez obie, ponieważ są one świetnym źródłem wiedzy.
http://www.amazon.com/Game-Engine-Architecture-Jason-Gregory/dp/1568814135
http://www.amazon.com/Game-Coding-Complete-Third-Edition/dp/1584506806
http://ogldev.atspace.co.uk/index.html
http://www.arcsynthesis.org/gltut/index.html
http://www.opengl.org/sdk/docs/man3/
http://www.lighthouse3d.com/tutorials/glsl-core-tutorial/glsl-core-tutorial-index/
http://www.opengl.org/sdk/docs/manglsl/
http://www.peroxide.dk/papers/collision/collision.pdf
(Łączę to, ponieważ trudno mi było znaleźć artykuły na temat prawidłowego wykrywania kolizji 3D).
Jest więcej książek, ale zanim skończysz z tym (szczególnie architektura Game Engine), będziesz wiedział lepiej, czego chcesz.
WinAPI, jeśli czujesz, że masz czas i wolę nauczyć się programowania w systemie Windows (jeśli tworzysz dla systemu Windows). FreeGLUT nadaje się do nauki, ale w końcu będziesz potrzebować większej funkcjonalności. Jednak jeśli chcesz iść zupełnie inną drogą, możesz uruchomić OpenGL z bibliotekami takimi jak SFML lub SDL. Trzymaj się FreeGLUT, chyba że jesteś uparty jak ja. Poszedłem prosto do WinAPI.
źródło