Всем доброго утро!Я разрабатываю подобие игрового движка, но, честно говоря, просто запутался и прошу совета в помощи продумывании его архитектуры. Книг различных множество и в каждой автор по своему создаёт движок и на основании его игру, какие-то решения я беру из них, что-то не совсем удобно. Поэтому и делаю свой. Проблема в том, что вариантов реализации вроде много, но я просто запутался как лучше.
Мой вариант такой:Классы для хранения объектов:
cObj - базой класс для cMesh, cSprite и cPrimitiv.
cMesh - класс для загрузки и хранении сетки модели.
cPrimitiv - класс для создания примитивов (куб, сфера, параллелограмма, цилиндр).
cSprite - для загрузки спрайтов.
cTexture - класс для загрузки и хранения текстуры.
cEffect - -//- эффектов (шейдеров).
cMaterial - -//- материалов.
cObject - класс служит для хранения:
- ссылки на сетку(либо примитив, либо спрайта),
- ссылки на текстуру,
- ссылку на эффект,
- ссылка на материал,
- описание (дополнительные поля, возможно ссылку на класс описания),
- положения в пространстве,
- размер,
- параметры текстуры.
Функции:
- изменения положения,
- рендер,
- и др. (относящиеся в изменению размеров, установка отображения текстур, эффектов и т.п.)
Классы для определения отображения объектов:
cCamera - класс для управления областью просмотра игроком.
сOctree (или cNodeTree, так называется у Адамса) - класс для разбиения пространства на кубы и построения дерева определяющее в каком кубе находятся те или иные объекты. (реализация описана в книге Джима Адамса или на сайте UralDev
http://www.uraldev.ru/articles/id/6).
Классы для ввода-вывода:
cInput - для работы с клавиатурой и мышью.
cPlay - для работы с сетью.
cSound - для работы со звуком.
cTimer - для работы со временем.
cFont - для работы со текстом.
cApplication - для создания приложения.
cGraphics - для создания устройства и установка параметров запуска устройства DirectX.
cMenu - для работы с меню.
В разработке класс для реализации физики и AI.
Принцип работы движка прост: - загружаем модели, при загрузке в физический движок загружается "геометрия" объектов,
- установка параметров отображения объектов (текстура, эффекты),
- запускаем игру,
- запускаем таймер (работы игры с определённой частотой),
- запрос с клавиатуры, мыши, сети, AI - изменение положения объектов,
- обработка физикой объектов - изменение положение объектов,
- обновляем октарное дерево,
- отображение тех объектов, что попадают в область видимости.
...
Фухты, дописал. Если есть, какие ошибки или что не так, напишите плиз, буду очень признателен. Требуется ваше одобрение или критика, а то я запутался в вариантах.