Я напишу правильный ответ, так как я был на вашем этапе около 2 месяцев назад.
Я начал писать очень простой игровой движок, чтобы лучше изучать OpenGL 3.x, но, поскольку у меня неопытность и скудные знания о том, как должна создаваться 3D-игра, я обычно сталкиваюсь с проблемами, когда осознаю, что должен был разработать свои классы. иначе.
Не беспокойся об этом. Из-за недостатка опыта вы никогда не сможете думать обо всех возможностях и способах использования данного класса в вашем движке. Лучше всего, если вы рассмотрите основные функции класса, реализуете его и позже реструктуризируете. Не пытайтесь задуматься, вы будете тратить время на этом этапе. Моя первая игра была полным беспорядком, я уверен, что это имело место для большинства людей.
Другие проблемы, с которыми я сталкиваюсь, - как кратко отслеживать время в игре и обновлять движение по мере необходимости, а также как сообщать визуализатору, что ему нужно перерисовать.
То, что вам нужно, это знание того, что такое игровой цикл. Это хорошее место для начала. Как только вы начнете писать более сложный код, такой как обработка физики, вы можете рассмотреть циклы с переменным временем кадра, но начните с малого. Вам пока хватит простого цикла игры с фиксированным кадром.
Кроме того, мне постоянно нужно создавать функции Get и Set для передачи различных флагов от одного объекта к другому, это плохая практика?
Это больше вопрос разработки программного обеспечения. Со временем вы увидите, какие данные вам нужно защищать, а какие - безопасно. Вероятно, будет лучше, если вы просто реализуете функцию, а затем видите то, что не представлено вне ее и может рассматриваться как общедоступные данные.
Это все дело опыта. Вы напишите класс камеры, затем вы увидите, какие функции вы хотите от него, кроме матриц преобразования. Если вы хотите немедленных советов, я бы сказал, реализовать голые, расширить позже.
Статьи и книги:
- Разработка игрового движка
Эти книги рассказывают об архитектуре современных игровых движков и конвейеров. Они дадут вам хороший обзор основных технологий. Я рекомендую первую книгу, если вам придется выбирать, она менее «пристрастна» к определенным технологиям, хотя, в конце концов, вы, вероятно, захотите пройти через обе, поскольку они являются отличным источником знаний.
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
(Я связываю это, потому что мне было трудно найти статьи о том, как сделать правильное 3D-обнаружение столкновений.)
Книг больше, но когда вы закончите с этим (особенно с Game Engine), вы будете лучше понимать, чего хотите.
Кстати, я все еще использую freeglut, вы бы порекомендовали мне перейти на более качественную систему управления окнами до того, как вы начнете прогрессировать или после того, как я лучше пойму OpenGL?
WinAPI, если вы чувствуете, что у вас есть время и желание изучать программирование для Windows (если вы разрабатываете для Windows). FreeGLUT отлично подходит для обучения, но в конечном итоге вам понадобится больше функциональности. Однако, если вы хотите пойти совершенно другим путем, вы можете запустить OpenGL с такими библиотеками, как SFML или SDL. Придерживайтесь FreeGLUT, если вы не упрямый, как я. Я пошел прямо к WinAPI.