LINUX.ORG.RU

История изменений

Исправление linuhs_user, (текущая версия) :

Я незнаю за что взяться

С EngineCore где будут функции для строк, вектров, кучи, только не вздумай реализовывать то что уже есть! Потом переходи на EngineGraphics где сделай окно, обработку событий окна. Сделай структуру для текстуры, там длинну ширину, GLuint texture_id конечно же, структура цветов, EngineMath где структуры векторов, операции над ними, матрицы, и все такое, еще нужно создать структуру камеры. Далее создай базовую структуру:

struct EntityDraw {
    Vector3D position;
    Vector3D rotation;
    Vector3D scale;
    ColorRGB color;
    void*    data;

    void (*free)(struct EntityDraw*);
    void (*draw)(struct EntityDraw*, struct Render*);
};
А далее и EngineGraphics/EntityModel.h можно написать!
struct EntityModelData {
    Texture2D texture;
    Array     triangles;
    int       animation_frame_current;
    int       animation_frame_count;
};

EntityDraw
EntityModelNew(const char* model_path) {
    EntityDraw ent;

    ent.data = malloc(sizeof(EntityModelData));
    EntityModelLoadFromFile(ent.data, model_path);   
 
    ent.free = ....;
    ent.draw = EntityModelDraw_Method;
    return(ent);
}

void
EntityModelDraw_Method(struct EntityDraw* self, struct Render* render) {
    EntityModelDraw(self->data, render);
}
Вот и так реализовываешь EntityCube, EntityTerrain, etc. Далее можно приступить к EngineAudio, там все просто, только не забудь если будешь делать 3D звук сделать привязку к Entity... А то я как то забыл, много потом переделывал.
Далее зависит от твоей игры, если будет клиент+сервер то можешь начать добавлять в EngineCore модуль для парсинга настроек пользователя и сделать EngineNetwork, сокеты и базовую часть, и переходи к реализации сервера, там на сервере уже надо сделать ServerCore, ServerPhysics, ServerGame где все будет обрабатываться. Неплохо было бы еще до всего этого написать свой редактор карт если они сложные, далее пишешь ServerMapLoader какой нибудь. UDP лучше выбрать. Если однопользовательская то тут наверное нужно EngineMapLoader, EnginePhysics и хватит думаю.

Писать лучше на С89 так как костыльный код на нем становится ужасно некрасивым, и сразу хочеться переделать, еще и скомпилируется везде. Для графики SDL2/OpenGL если GL старый то возьми glu, если новый с шейдерами итд то возьми: https://github.com/arkanis/single-header-file-c-libs/blob/master/math_3d.h . Для загрузки текстур лучше SDL2_image он поддерживает почти все форматы, для звука SDL2_mixer, для сети SDL2_net, и для рисовки текста тоже SDL2_ttf, хотя если тебе не нужен он на текстурах или просто в свободном пространстве то текст рисовать лучше с помощью Nuklear, вот его как раз и для GUI взять можно, как физический движок есть ODE, он написан на плюсах вроде, но у него интерфейс на чистом C. Еще неплохо было бы встроить в формат карт скриптование, удобная вещь! Тут советую взять http://duktape.org/
Для анимированных моделей можно взять MD2 для начала.

Вот, но прежде чем это все писать подумай над тем где ты будешь брать модели, звуки, текстуры, я думал можно будет накачать но в итоге ничего не нашел, лол.

Исправление linuhs_user, :

Я незнаю за что взяться

С EngineCore где будут функции для строк, вектров, кучи, только не вздумай реализовывать то что уже есть! Потом переходи на EngineGraphics где сделай окно, обработку событий окна. Сделай структуру для текстуры, там длинну ширину, GLuint texture_id конечно же, структура цветов, EngineMath где структуры векторов, операции над ними, матрицы, и все такое, еще нужно создать структуру камеры. Далее создай базовую структуру:

struct EntityDraw {
    Vector3D position;
    Vector3D rotation;
    Vector3D scale;
    ColorRGB color;
    void*    data;

    void (*free)(struct EntityDraw*);
    void (*draw)(struct EntityDraw*, struct Render*);
};
А далее и EngineGraphics/EntityModel.h можно написать!
struct EntityModelData {
    Texture2D texture;
    Vector    triangles;
    int       animation_frame_current;
    int       animation_frame_count;
};

EntityDraw
EntityModelNew(const char* model_path) {
    EntityDraw ent;

    ent.data = malloc(sizeof(EntityModelData));
    EntityModelLoadFromFile(ent.data, model_path);   
 
    ent.free = ....;
    ent.draw = EntityModelDraw_Method;
    return(ent);
}

void
EntityModelDraw_Method(struct EntityDraw* self, struct Render* render) {
    EntityModelDraw(self->data, render);
}
Вот и так реализовываешь EntityCube, EntityTerrain, etc. Далее можно приступить к EngineAudio, там все просто, только не забудь если будешь делать 3D звук сделать привязку к Entity... А то я как то забыл, много потом переделывал.
Далее зависит от твоей игры, если будет клиент+сервер то можешь начать добавлять в EngineCore модуль для парсинга настроек пользователя и сделать EngineNetwork, сокеты и базовую часть, и переходи к реализации сервера, там на сервере уже надо сделать ServerCore, ServerPhysics, ServerGame где все будет обрабатываться. Неплохо было бы еще до всего этого написать свой редактор карт если они сложные, далее пишешь ServerMapLoader какой нибудь. UDP лучше выбрать. Если однопользовательская то тут наверное нужно EngineMapLoader, EnginePhysics и хватит думаю.

Писать лучше на С89 так как костыльный код на нем становится ужасно некрасивым, и сразу хочеться переделать, еще и скомпилируется везде. Для графики SDL2/OpenGL если GL старый то возьми glu, если новый с шейдерами итд то возьми: https://github.com/arkanis/single-header-file-c-libs/blob/master/math_3d.h . Для загрузки текстур лучше SDL2_image он поддерживает почти все форматы, для звука SDL2_mixer, для сети SDL2_net, и для рисовки текста тоже SDL2_ttf, хотя если тебе не нужен он на текстурах или просто в свободном пространстве то текст рисовать лучше с помощью Nuklear, вот его как раз и для GUI взять можно, как физический движок есть ODE, он написан на плюсах вроде, но у него интерфейс на чистом C. Еще неплохо было бы встроить в формат карт скриптование, удобная вещь! Тут советую взять http://duktape.org/
Для анимированных моделей можно взять MD2 для начала.

Вот, но прежде чем это все писать подумай над тем где ты будешь брать модели, звуки, текстуры, я думал можно будет накачать но в итоге ничего не нашел, лол.

Исходная версия linuhs_user, :

Я незнаю за что взяться

С EngineCore где будут функции для строк, вектров, кучи. Потом переходи на EngineGraphics где сделай окно, обработку событий окна. Сделай структуру для текстуры, там длинну ширину, GLuint texture_id конечно же, структура цветов, EngineMath где структуры векторов, операции над ними, матрицы, и все такое, еще нужно создать структуру камеры. Далее создай базовую структуру:

struct EntityDraw {
    Vector3D position;
    Vector3D rotation;
    Vector3D scale;
    ColorRGB color;
    void*    data;

    void (*free)(struct EntityDraw*);
    void (*draw)(struct EntityDraw*, struct Render*);
};
А далее и EngineGraphics/EntityModel.h можно написать!
struct EntityModelData {
    Texture2D texture;
    Vector    triangles;
    int       animation_frame_current;
    int       animation_frame_count;
};

EntityDraw
EntityModelNew(const char* model_path) {
    EntityDraw ent;

    ent.data = malloc(sizeof(EntityModelData));
    EntityModelLoadFromFile(ent.data, model_path);   
 
    ent.free = ....;
    ent.draw = EntityModelDraw_Method;
    return(ent);
}

void
EntityModelDraw_Method(struct EntityDraw* self, struct Render* render) {
    EntityModelDraw(self->data, render);
}
Вот и так реализовываешь EntityCube, EntityTerrain, etc. Далее можно приступить к EngineAudio, там все просто, только не забудь если будешь делать 3D звук сделать привязку к Entity... А то я как то забыл, много потом переделывал.
Далее зависит от твоей игры, если будет клиент+сервер то можешь начать добавлять в EngineCore модуль для парсинга настроек пользователя и сделать EngineNetwork, сокеты и базовую часть, и переходи к реализации сервера, там на сервере уже надо сделать ServerCore, ServerPhysics, ServerGame где все будет обрабатываться. Неплохо было бы еще до всего этого написать свой редактор карт если они сложные, далее пишешь ServerMapLoader какой нибудь. UDP лучше выбрать. Если однопользовательская то тут наверное нужно EngineMapLoader, EnginePhysics и хватит думаю.

Писать лучше на С89 так как костыльный код на нем становится ужасно некрасивым, и сразу хочеться переделать, еще и скомпилируется везде. Для графики SDL2/OpenGL если GL старый то возьми glu, если новый с шейдерами итд то возьми: https://github.com/arkanis/single-header-file-c-libs/blob/master/math_3d.h . Для загрузки текстур лучше SDL2_image он поддерживает почти все форматы, для звука SDL2_mixer, для сети SDL2_net, и для рисовки текста тоже SDL2_ttf, хотя если тебе не нужен он на текстурах или просто в свободном пространстве то текст рисовать лучше с помощью Nuklear, вот его как раз и для GUI взять можно, как физический движок есть ODE, он написан на плюсах вроде, но у него интерфейс на чистом C. Еще неплохо было бы встроить в формат карт скриптование, удобная вещь! Тут советую взять http://duktape.org/

Вот, но прежде чем это все писать подумай над тем где ты будешь брать модели, звуки, текстуры, я думал можно будет накачать но в итоге ничего не нашел, лол.