MODEL


    Documentation











[revenir à la page d'accueil]

MODEL est un conteneur permettant de représenter un objet 3D comme un ensemble de faces. Chaque face est décrite par un ensemble de sommets attribués.

Un objet MODEL est créé et détruit par le couple de fonctions :
extern MODEL *model_new(char *filename);
    crée un objet modèle SANS CHARGER LE FICHIER.
  
extern void model_free(MODEL *m);
    détruit un objet model.

Le reste de l'interface de MODEL permet d'accéder aux différentes propriétés des faces qui le constitue :

extern FACE *model_get_face_ptr(MODEL *model, int face_id);
    renvoie un pointeur sur la face identifiée par face_id

extern MATERIAL *model_face_get_material_ptr(MODEL *model, FACE *face);
    renvoie un pointeur sur le descripteur de la matière associée à la face 'face'.

extern float *model_face_get_vertex_ptr(MODEL *model, FACE *face, int vertex_id);
    renvoie un pointeur sur un sommet de la face. Le sommet est identifié par vertex_id.

extern float *model_face_get_vertex_norm_ptr(MODEL *model, FACE *face, int vertex_id)
    renvoie la normale du sommet de la face.

extern float *model_face_get_vertex_texcoord_ptr(MODEL *model, FACE *face, int vertex_id)
    renvoie les coordonnées de texture du sommet de la face.

extern int model_face_get_edge(MODEL *model, FACE *face, int edge_id, VEC *edge);
    calcule et renvoie le vecteur associé à l'arete identifiée par edge_id.

extern float *model_face_get_norm_ptr(MODEL *model, FACE *face);
    renvoie un pointeur sur le vecteur normal à la face.

extern float model_face_get_area(MODEL *model, FACE *face);
    calcule et renvoie l'aire de la face.

extern int model_get_faces_n(MODEL *model);
    renvoie le nombre de faces du modèle.


Les fonctions suivantes permettent de construire un MODEL à partir d'un fichier :

extern int model_load_obj(MODEL **pmodel, char *filename);
    charge un objet 3D au format maya .obj et renvoie un MODEL le représentant.

extern int model_save_obj(MODEL *model, char *filename);
    enregistre un objet MODEL.

extern int model_is_obj(char *filename);
    vérifie qu'un nom de fichier se termine par .obj

extern int model_load_off(MODEL **pmodel, char *filename);
    charge un objet 3D au format .off et renvoie un MODEL le représentant.

extern int model_is_off(char *filename);
    vérifie q'un nom de fichier se termine par .off



Les fonctions  suivantes manipulent le MODEL :

extern void model_set_faces_norm(MODEL *model);
    calcule les normales des faces du modèle.

extern void model_set_vertex_norm(MODEL *model);
    calcule les normales des sommets du modèle.


Les fonctions suivantes "nettoient"/"réorganisent" le modèle :

extern int model_set_triangles(MODEL **model);
    triangule les faces du modèle.

extern int model_clean(MODEL **model);
    élimine les données inutilisées du modèle. Utile avant d'enregistrer le modèle.

extern int model_vbo_clean(MODEL **model)
    prépare le modèle pour un affichage OpenGL utilisant un vertex array ou un vertex buffer object.



Exemples d'utilisation de MODEL :

charger un modele 3D et créer un objet RENDER

int main(int argc, char **argv)
{
    MODEL *model;
    RENDER *render;
  
    /* charge le modele .obj ou .off passé en paramètre argv[1]
    */
    model= NULL;
    if((model_is_obj(argv[1])==0 && model_load_obj(&model, argv[1]) < 0)
    || (model_is_off(argv[1])==0 && model_load_off(&model, argv[1]) < 0))
    {
        printf("\n  -- unable to load model '%s'\n", argv[1]);
        return 1;
    }
  
    if(model==NULL)
    {
        printf("\n -- unknown model format or missing \n");
        return 1;
    }
  
    /* cree le contexte de calcul */
    render= render_new(model, "diffuseLuminaire1SG");
 
    /* faire quelquechose avec l'objet RENDER */
    ...

    return 0;
}