prosperon/source/engine/3d/model.h

91 lines
1.6 KiB
C
Raw Normal View History

2021-11-30 21:29:18 -06:00
#ifndef MODEL_H
#define MODEL_H
2023-05-12 13:22:05 -05:00
#include "HandmadeMath.h"
2023-11-30 10:47:59 -06:00
#include "transform.h"
#include "sokol/sokol_gfx.h"
2023-12-11 08:36:45 -06:00
#include "gameobject.h"
2024-04-26 16:04:31 -05:00
#include "anim.h"
#include "texture.h"
2024-05-02 13:52:28 -05:00
#define MAT_POS 0
#define MAT_UV 1
#define MAT_NORM 2
#define MAT_BONE 3
#define MAT_WEIGHT 4
#define MAT_COLOR 5
#define MAT_TAN 6
2021-11-30 21:29:18 -06:00
2023-12-04 13:38:37 -06:00
typedef struct material {
2024-04-26 16:04:31 -05:00
texture *diffuse;
texture *metalrough;
float metal;
float rough;
texture *normal;
float nrm;
texture *occlusion;
float occl;
texture *emissive;
HMM_Vec3 emis;
2023-12-04 13:38:37 -06:00
} material;
struct model;
2024-04-26 16:04:31 -05:00
typedef struct primitive {
2024-04-30 10:32:27 -05:00
sg_buffer pos;
sg_buffer norm;
sg_buffer uv;
sg_buffer bone;
sg_buffer weight;
2024-05-02 13:52:28 -05:00
sg_buffer color;
2024-04-30 10:32:27 -05:00
sg_buffer idx;
material *mat;
2024-04-26 16:04:31 -05:00
uint32_t idx_count;
} primitive;
2023-11-03 08:31:06 -05:00
/* A single mesh */
2023-12-04 13:38:37 -06:00
typedef struct mesh {
2024-04-26 16:04:31 -05:00
primitive *primitives;
HMM_Mat4 *m;
2023-12-04 13:38:37 -06:00
} mesh;
2024-04-26 16:04:31 -05:00
typedef struct joint {
int me;
struct joint *children;
} joint_t;
typedef struct md5joint {
struct md5joint *parent;
HMM_Vec4 pos;
HMM_Quat rot;
HMM_Vec4 scale;
HMM_Mat4 t;
} md5joint;
typedef struct skin {
md5joint **joints;
HMM_Mat4 *invbind;
HMM_Mat4 binds[50]; /* binds = joint * invbind */
md5joint *root;
} skin;
2023-11-03 08:31:06 -05:00
/* A collection of meshes which create a full figure */
2023-12-04 13:38:37 -06:00
typedef struct model {
2023-05-12 13:22:05 -05:00
struct mesh *meshes;
2024-04-26 16:04:31 -05:00
md5joint *nodes;
2024-04-30 10:32:27 -05:00
material *mats;
2024-04-26 16:04:31 -05:00
skin skin;
struct animation anim;
2023-12-04 13:38:37 -06:00
} model;
2021-11-30 21:29:18 -06:00
/* Make a Model struct */
2024-04-20 12:55:20 -05:00
struct model *model_make(const char *path);
void model_free(model *m);
2021-11-30 21:29:18 -06:00
2024-04-20 12:55:20 -05:00
void model_draw_go(model *m, gameobject *go, gameobject *cam);
2021-11-30 21:29:18 -06:00
2024-01-14 10:24:31 -06:00
material *material_make();
void material_free(material *mat);
2021-11-30 21:29:18 -06:00
#endif