SDL logo

C. Drocourt - 2006

drocourt@iut-amiens.fr

3D

logo iut

Introduction.

Avant de commencer l'apprentissage d'opengl, il faut avoir quelques notions de 3D. Tout d'abord, il existe plusieurs types de perspectives :

La perspective axonométrique :
Perspective cavalière : Les axes x et y sont orthogonaux, et l'axe z possède un certain angle avec l'axe x, on reporte ensuite les distances sur z avec un coefficient inférieur à 1, la déformation est donc uniquement en z.
Perspective isométrique : Les 3 axes possèdent un angle de 120° les uns des autres et les distances sont reportées avec le même coefficient multiplicateur de 0,82.

Cavalière / Isométrique
La perspective conique :
Il s'agit d'une projection passant par l'oeil, le plan image (la toile ou l'écran) et les objets de la scène, la taille d'un objet diminue donc en fonction de l'augmentation de la distance qui le sépare de l'observateur.

La perspective curviligne :
Qui prend également en compte la diminution de la taille des objets de manière latérale.

Exercice

Le but de l'exercice est de réaliser un programme SDL qui affichera un cube en rotation.

1 -  Vous allez réaliser les fonctions suivantes :
putpixel : Qui permet d'afficher un point a l'écran.
RI_AffichePoint2D : Qui prend en argument les coordonnées d'un point, en supposant que nous travaillons avec un repère orthonormé "classique", dont l'origine est sur le milieu de notre fenêtre, cette fonction appelle donc la précédente.
RI_f3D2D : Fonction de conversion d'une coordonnée 3D (repère caméra) en coordonnée 2D (repère image).
RC_AfficheObjet3D : Qui permet d'afficher un objet complet.
RO_RotationObjet3D : Qui calcule les coordonnées 3D d'un objet après une rotation dans le repère objet.

    La fonction f3D2D() utilisera une projection orthogonale (perspective axonométrique).

2 - Vous allez maintenant modifier la fonction f3D2D() pour que les dimensions diminuent en fonction de la profondeur : perspective conique (x et y se modifie en fonction de z).

Questions supplémentaires :

3 - Utilisez la librairie SDL_gfx (#include <SDL_gfxPrimitives.h> et option -lSDL_gfx de la ligne de compilation) avec la fonction lineRGBA() pour tracer votre cube en fil de fer.