Table des matières

Graphiques 3D : construction d'une scène

1. Introduction

Les graphiques 3D sont programmés avec WebGL (version de OpenGL ES 2.0 pour javascript). Ils nécessitent donc une navigateur implémentant WebGL (Firefox, Chrome, Opera). La carte graphique (ou le contrôleur graphique) doit prendre en charge OpenGL 4.0.

2. Création d'un canvas

Un canvas pour WebGL s'ouvre avec la fonction fig3d.

Le canvas apparaît après la boîte de saisie, et après d'éventuelles sorties textuelles. Plusieurs canvas peuvent être créés dans le même bloc de calcul; ils apparaissent alors l'un au dessus de l'autre.

Les instructions graphiques qui sont exécutés après l'appel de fig3d agissent sur le canvas qui vient d'être créé.

3. Style graphique

Un style graphique est défini dans un objet style, dont les propriétés sont :

  • style.color (array) : couleur de l'objet, sous forme d'un tableau [r,g,b,a] (valeurs comprises entre 0.0 et 1.0)
  • style.texture (string) : identifiant de l'image servant de texture. L'image est fournie sous forme d'un élément html img avec un attribut id

4. Cadre de la scène

La scène à représenter est délimitée par un cadre (parallélépipède). Le cadre est défini avec la fonction plotframe3d :

5. Ajout d'objets et rendu

Les objets graphiques sont ajoutés à la scène par la fonction add3d. La boucle de rendu de la scène est lancée par la fonction render3d. Voici un exemple d'une scène comportant une sphère et un rectangle :

La rotation de la scène est obtenue avec la souris. La vue peut être agrandie (zoom avant) en cliquant à gauche sur la souris tout en maintenant la touche shift enfoncée. De même, la touche ctrl permet d'effectuer un zoom arrière.

En faisant tourner la scène, on remarque que la direction d'éclairage est fixe par rapport à l'observateur. Par défaut, la lumière provient de l'observateur, ce qui correspond à la direction d'éclairage [0,0,1]. Pour changer la direction et l'intensité de l'éclairage, on utilise la fonction lighting comme dans l'exemple ci-dessous :

La propriété intensity permet d'ajuster la proportion de lumière issue de la source par rapport à la lumière ambiante. Si l'intensité vaut 1, il n'y a pas de lumière ambiante (les faces non éclairées son noires). Si l'intensité vaut 0, toute la lumière est ambiante.

6. Transformation des objets

Chaque objet possède une matrice de transformation affine, égale à l'identité par défaut. En agissant sur cette matrice, on peut déplacer ou faire tourner l'objet. L'exemple suivant montre une translation et une rotation appliquées à un rectangle :

7. Importation STL et animation

Creative Commons LicenseTextes et figures sont mis à disposition sous contrat Creative Commons.