top of page

3D et SDL 1.2

 

 

Ce tuto montre comment il est possible de faire de la 3D en SDL (1.2) pure.

 

Les applications sont parfaites pour créer des scènes statiques car, bien sur, on ne dispose pas de l’accélération matérielle et le rendu sera lent.

Cependant la démonstration suivante permet de faire bouger en temps réel un cube dessiné point par point et avec une couleur différente pour chaque point (mais il n’y a qu’un seul cube !).

 

Le principe de la 3D est de transformer les coordonnées réelles d’un point P(x,y,z) vers les 2 coordonnées xec et yec de l’écran.

Pour garder les mêmes axes x et y entre le réel et l’écran : l’axe Z ne représentera pas la hauteur mais la profondeur (la hauteur est l’axe y).

 

Pour simplifier les calculs nous allons faire une approximation qui est valable lorsque la distance entre l’observateur et l’écran n’est pas trop faible. Ceci correspond à une focale pas trop grande où les verticales restent verticales : la variation de y n’a alors pas d’incidence sur xec ni celle de x sur yec.

 

La transformation est alors une simple proportionnalité par application du théorème de Thalès : les coordonnés sur les axes x et y sont multipliées par un rapport qui dépend de la profondeur Z. Ce rapport est celui de la distance observateur/écran entre la distance observateur/Point.

 

 

xec = x . rapport

yec= y . rapport

Dans l’orientation choisie 3 faces du cube sont visibles. En fait c’est un parallélépipède rectangle qui est affiché. Le parallélépipède ne bouge pas : ce sont ses dimensions qui sont modifiées selon les 3 composantes RVB.

Chaque point du cube complet représente une couleur.

 

Pour afficher une face : une composante de couleur est fixe et on fait varier les 2 autres entre 0 et les valeurs de composantes cela donne une couleur pour chaque point.

 

Voici le code pour afficher une face :

 

Avec la fonction de transformation :

 

Petite vidéo de démonstration : DEMO

 

 

 

bottom of page