|
|
L'OpenGL a été développé par Silicon Graphics Inc. OpenGL (Open Graphics Library) est une bibliothèque graphique qui permet la manipulation d'objet en deux et trois dimensions. On peut ainsi dessiner des objets , également appelé primitives, géométrique tel que des points, lignes, polygones... L'OpenGL existe sous plusieurs systèmes d'exploitation comme Windows, Linux, Mac OS,... Ce tutorial est une approche à l'utilisation de l'OpenGL en Delphi.
Pour utiliser l'OpenGL en Delphi, vous devez effectuer quelques opérations : 1. Vous avez besoin d'une version de Delphi ultérieure à la version 3. Vous pouvez utiliser l'OpenGL sous Delphi 3, Delphi 4, Delphi 5, Delphi 6, Delphi 7... 2. Vous devez avoir installé sur votre ordinateur, la DLL"OpenGl32.dll. Cette DLL est généralement fournie et installée avec les drivers de votre carte graphique. 3. Télégargez ensuite la librairie OpenGL (43 Ko) pour Delphi. Décompressez ce fichier dans le répertoire "Lib\Opengl" de Delphi. 4. Téléchargez, si vous le souhaitez l'aide pour l'OpenGL (542 Ko). Vous y trouverez une aide pour les procédures et fonctions d'OpenGL.
Le tableau suivant regroupe les types de données prédéfinis sous OpenGL.
Lorsque vous utiliserez une fonction OpenGL avec comme paramètres des type de données, il faudra à chaque fois, choisir le type de données et mettre le suffixe correspondant à la fin de la fonction.
Le "2" représente que l'on travail en 2D sur X et Y. Pour travailler en 3D sur X, Y, Z, on mettra "3". Voici le tableau des primitives d'OpenGL.
Voici un exemple d'utilisation des primitives.
On trace, ici, un carré. "glBegin" et "glEnd" délimite le tracé du carré. "glColor" correspond à la couleur. Cette fonction a pour paramètres l'intensité de couleur RVB (Rouge Vert Bleu). "glVertex" est les coordonées des tracés. On pourrait comparer cette fonction à la fonction "LineTo" de Delphi.
Lorsque vous utilsez OpenGL, vous devez pour chaque programme, liez OpenGL à la fenêtre (form). Tout d'abord, créez une nouvelle application puis liez l'unité "OpenGL12" au programme.
On va maintenant créer avec la variable "RC" qui est l'adresse du contexte graphique où OpenGL dessinera. Cliquez deux fois sur la propriété OnCreate de la Form. Dans cet événement, on va créer le contexte graphique pour notre fenêtre (Form1). On définit le handle de notre fenêtre, le mode de travail "opGDI". "32" signifie que l'on va travailler en 32 bit. Ensuite, avec "wglMakeCurrent", on crée le contexte graphique pour notre fenêtre.
Lorsqu'on a terminé, il faut supprimer le contexte graphique de notre fenêtre grâce à wglDeleteContext.
On passe maintenant à la partie visuel. Voici à ce que ressemblera notre carré. Pour l'instant, nous travaillons en 2D. Lorsque la fenêtre se construit pour la première fois, l'événement OnResize est activé. C'est dans cet événement que l'on va initialiser l'affichage. L'utilisation de cet événement permet de réinitialiser l'affichage si la fenêtre est redimensionné. Dans un programme, pour afficher quelques chose en OpenGL, il faut faire ceci.
"glMatrixMode" permet de spécifier la matrice de projection. "glLoadIdentity" initialise la matrice de projection . "gluPerspective" définit le champ de vision. Voici la description des paramètres de "gluPerspective" : "45" est l'angle de vue en degré. La valeur est comprise entre 0 et 180. "Width/Height" est la largeur divisée par la hauteur. "1" et "10" sont les valeurs correspondant à la distance du champ de vision. Ensuite avec "Form1.Paint", on fait appelle à l'événement OnPaint de la fenêtre.
"glClear" vide le tampon. Cela permet d'obtenir un raffraichissement de l'image. "glTranslate" permet d'effectuer une translation vers les axes X,Y,Z.
Il est facile de réaliser un dégrader en OpenGL. Il suffit d'ajouter "glColor3f" à chaque fois que l'on trace un coin du carré. Pour le coin en haut à gauche la couleur est verte. Pour le coin en haut à droite, la couleur est jaune. Pour le coin en bas à gauche, la couleur est bleu. Pour le coin en bas à droite, la couleur est rouge.
Voici que nous allons réaliser. Pour réaliser un mouvement, la structure du programme sera différente puisque l'on travaillera maintanant en 3D. En effet, il faut passer du carré à un cube. On va également changer le mode travail. On va maintenant travailler en double tampons. Son principe est de dessiner dans le premier tampon puis de l'afficher dans le deuxième. Ce mode permet un affichage plus clair. Il faut changer "opGDI" par "opDoubleBuffered" dans les paramètres de contexte graphique de notre fenêtre..
On va utiliser le composant TTimer de l'onglet "Système" de la palette de composants de Delphi pour réaliser le mouvement. On va utiliser une variable "Angle" de type TGLFloat que l'on incrémentera.
Si vous changez le chiffre "3" alors la vitesse augmentera ou diminuera. L'événement OnResize de la fenêtre ne change pas. Par contre l'événement On Paint va beaucoup changer. C'est ici, que l'on va passer du carré au cube effectuer le mouvement. "glPushMatrix" sauvegarde la matrice active. "glPopMatrix" récupérer la matrice précédemment sauvegarder. "glTranslate" permet une translation d'axe X,Y et Z. "glRotate" permet une rotation d'axe X,Y,Z. "glScale" permet de redimensionner une primitive. Il faut donc créer six faces pour le cube. N'oublions pas que bous travaillons en 3D, il y a donc l'axe Z qui intervient.
"SwapBuffers(Form1.Canvas.Handle)" permet de basculer le contenu du premier tampon vers le deuxième.
Comme vous le voyez, il est assez difficile de réaliser des formes géométrique plus complexes comme par exemple une sphère. C'est pour cela qu'il existe en Delphi, des outils facilitant la conception de 3D. Les plus célébres sont Glut [93Ko] et GLScene. En une ligne de programmation, vous pouvez construire une sphère, un cube, une pyramide... Ils permettent également de gérer le placement de la lumière sur les primitives et d'insérer une texture sur les primitives. |
Tous droits réservés - Contacts |