Projection 3D

Transformation

Remplissage des faces

Eclairage

Textures

Z-Buffering



Programmation 3D



Chapitre III
Modélisations




Ce chapitre traite du remplissage des faces par une couleur unie.

Tout d'abord il faut savoir qu'il y a différentes façons de représenter nos objets 3D.
- sous forme de lignes " FILIAIRE "
- sous forme de faces transparentes " FACE DE VERRE "
- sous forme de faces pleines " FACE CACHEE "

GESTION FILIAIRE

/*
On définit une structure avec une suite de sommets puis
des couples d'entiers qui servent a repérer les arrêtes.
*/
typedef struct str_objet
{
        int nbsommet;
        int nbligne;
        SOMMET *sommet;
        _2D ligne;
}

/*
maintenant il nous suffit de projeter les sommets puis
de tracer les lignes définies par la structure
*/
void afficher_objet(OBJET *Objet,MAT4x4 m)
{
        int v;
        transformation(Objet,m);
        for(v=0;v<Objet->nbligne;v++)
        {
                int x1,y1,x2,y2;
                x1=Objet->sommet[Objet->ligne[v].x].ecran.x;
                y1=Objet->sommet[Objet->ligne[v].x].ecran.y;
                x2=Objet->sommet[Objet->ligne[v].y].ecran.x;
                y2=Objet->sommet[Objet->ligne[v].y].ecran.y;
                draw_line(x1,y1,x2,y2);
        }
}

/*
La fonction draw_line ne fait ni plus ni moins qu'afficher une portion de droite
de coordonnées x1,y1 et x2,y2.
*/

FACE DE VERRE

/*
Tout d'abord il nous faut définir l'objet par ses sommets,
mais aussi par ses faces.
Les faces appelées aussi polygone, peuvent être définies par
un ensemble de triangles.
Nous allons donc avoir besoin d'une nouvelle structure Objet :
*/
typedef struct str_triangle
{
        int a,b,c;
}TRIANGLE;

typedef struct str_objet
{
        int nbsommet;
        int nbface;
        SOMMET *sommet;
        TRIANGLE *face;
}OBJET;

void afficher_objet(OBJET *Objet,MAT4x4 m)
{
        int v;
        _2D poly[3];
        for(v=0;v<Objet->nbface;v++)
        {
                poly[0] = Objet->sommet[Objet->face[v].a].ecran;
                poly[1] = Objet->sommet[Objet->face[v].b].ecran;
                poly[2] = Objet->sommet[Objet->face[v].c].ecran;
                draw_poly(poly,3,couleur);
        }
}
/*
On a donc affiché les faces, mais on n'a pas tenue compte
des recouvrements ce qui donne une impression de transparence.
draw_poly trace des polygones fermés concaves.
J'ai écris son code dans le chapitre suivant.
*/

GESTION FACE CACHEE

La gestion de face cachée, met en place des notions d'éclairage et de distinction des faces apparentes.
C'est pour cela que je leur ai attribué un chapitre que je nomme Éclairage.