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.