Familiarisation avec OpenGL
Transcription
Familiarisation avec OpenGL
Introduction GLScene
(J-C Armici, septembre 2004, www.unvrai.com et www.developpez.com)
Utilisation d'OpenGL avec Delphi
Plusieurs développeurs, dont Eric Grange qui est parti d'un travail de Mike Lischke, ont
implémenté une bonne partie d'OpenGL sous forme d'objets Delphi. Cet outil en pleine
évolution s'appelle Glscene. Pour travailler avec GLScene il faut:
•
se procurer le produit (entièrement gratuit)
•
l'installer
•
l'utiliser
Où trouver GLScene ?
On peut trouver GLScene à de multiples endroits, mais il est préférable de le prendre à la
source. Voici la marche à suivre détaillée. Toutefois ce qui suit concerne la situation en
septembre 2004 et des modifications peuvent intervenir dans l'avenir.
•
Aller sur le site http://glscene.sourceforge.net et cliquer sur "Download"
•
là il convient de chercher la dernière version disponible. A noter que la dernière
version de GLScene supporte les deux ou trois dernières versions de Delphi (par
exemple Delphi 5, 6 et 7)
-1-
•
le lien vers la dernière version amène, en principe, sur le site sourceforge.net où
GLScene est enfin téléchargeable:
Installation de GLScene
Voici le contenu du fichier compressé contenant GLScene:
fig. 1
Pour gagner de la place, vous pouvez garder uniquement le répertoire Delphix, où x est le
numéro de version de votre Delphi.
fig. 2
Créez un répertoire GLScene dans Program Files/Borland/Delphi7. Vous pouvez y
copier les répertoires de GLScene de la figure 2
fig. 3
-2-
Afin de faciliter l'installation, au niveau de la recherche de chemins, vous pouvez copier le
fichier glscene.inc du répertoire Source dans le répertoire Delphi7 (celui qui se trouve
sous le répertoire glscene).
Il faut ensuite intégrer GLScene à la VCL de Delphi:
•
lancer Delphi
•
choisir Fichier/Ouvrir...
•
choisir (figure 4) le fichier GLScene7.dpk (le package de base de GLScene). A noter
que vous pouvez également installer de la même manière les autres packages si
vous utilisez des fonctionnalités qui ne sont pas dans le package de base.
fig. 4
•
la fenêtre suivante apparaît alors:
fig. 5
•
il faut alors cliquer sur Compiler
•
tout devrait se dérouler normalement; vous pouvez alors fermer cette fenêtre (figure
5) et confirmer la mise à jour de la VCL
-3-
•
vous devez dès lors avoir de nouveaux onglets dont le nom commence par
GLScene
fig. 6
Utilisation de GLScene
Il reste une étape importante consistant à indiquer à Delphi le(s) chemin(s) des
bibliothèques GLScene. Pour cela:
•
choisir Outils/Options d'environnement... La fenêtre suivante apparaît:
fig. 7
•
choisir l'onglet Bibliothèque et cliquer sur le bouton indiqué ci-dessus. Une fenêtre
semblable à celle-ci apparaît:
-4-
fig. 8
•
le but est d'ajouter des chemins dans la liste existante. Pour cela, cliquer sur le
bouton indiqué ci-dessus. Dans la fenêtre (figure 9) qui apparaît, choisir le
répertoire Delphi7\glscene\Source, valider par OK.
fig. 9
•
à ce point, sur la fenêtre de la figure 8, cliquer sur le bouton Ajouter (qui n'est plus
grisé.
•
répéter les deux opérations précédentes pour les répertoires:
Delphi7\glscene\Source\Platform et Delphi7\glscene\Source\Base
•
vous serez peut-être amené à ajouter d'autres chemins d'accès en si vous utilisez
des fonctionnalités avancées de GLScene.
-5-
Un exemple simple d'application avec GLScene
Nous allons voir comment créer un programme simple, constitué d'une scène comprenant
une caméra, un source lumineuse et la possibilité d'effectuer des zooms et des
déplacements à l'aide de la souris. Cet exemple peut-être pris comme modèle de départ
pour d'autres programmes.
Parmi les composants à disposition, nous utiliserons essentiellement les deux suivants:
TGLScene: constitue une scène composée d'objets
TGLSceneViewer: permet de visualiser une scène
Voici les étapes détaillées pour créer cet exemple:
•
créer une nouvelle application: Fichier/Nouveau/Application, redimensionner la
fenêtre et ajouter un titre
•
Ajouter un composant TGLScene et un composant TGLSceneViewer:
fig. 10
-6-
•
double-cliquer sur le composant TGLScene afin d'ouvrir la fenêtre suivante:
fig. 11
•
cette étape est importante, car toute la scène sera construite depuis cette fenêtre
d'édition de scène.
•
Un clic droit sur Cameras permet d'ajouter une caméra, afin de voir la scène
fig. 12
-7-
•
Ajouter un objet DummyCube sous Scene objects:
fig. 13
•
Ajouter un objet Cylinder sous DummyCube1:
fig. 14
-8-
•
Sélectionner la caméra GLCamera1 dans la fenêtre de GLScene et indiquer
DummyCube1 dans sa propriété TargetObject (dans l'inspecteur d'objets de
Delphi)
fig. 15
•
Sélectionner le composant TGLSCeneViewer dans la fenêtre de l'application et
indiquer GLCamera1 dans sa propriété Camera
fig. 16
•
Sélectionner GLCamera1 et spécifier la valeur 3 pour chaque coordonnée (x, y et
z) de sa Position.
-9-
•
On voit alors apparaître le cylindre
fig. 17
•
Ajouter un objet GLLightSource1 (source de lumière) dans Scene objects
fig. 18
•
Sélectionner GLLightSource1 et spécifier les valeur 10, 6 et 0 pour chaque
coordonnée (x, y et z) de sa Position.
-10-
•
Le cylindre est maintenant illuminé, car la source lumineuse a été déplacée de sa
position d'origine (0, 0, 0):
fig. 19
Ajoutons la possibilité d'effectuer des zooms à l'aide des touches '+' et '-'. Pour cela
ajouter le code suivant sur l'événement OnKeyPress de la fenêtre de l'application:
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
// zoom avant et arrière
case key of
'-' : GLCamera1.AdjustDistanceToTarget(1.1);
'+' : GLCamera1.AdjustDistanceToTarget(0.9);
end;
key := #0;
end;
fig. 20
-11-
Par défaut, les objets ne sont pas bien "lissés". Afin d'améliorer la présentation, spécifier
par exemple la valeur 64 dans la propriété Slices du cylindre. Voici l'amélioration obtenue:
fig. 21
Enfin, nous allons ajouter la possibilité de faire tourner la caméra autour de la scène. Pour
cela nous allons déclarer deux variables (champs) de type entier mx et my dans la section
privée de notre fenêtre d'application:
private
{ Déclarations privées }
mx, my: integer;
et ajouter le code suivant dans l'événement OnMouseMove de l'objet GLSceneViewer1:
procedure TForm1.GLSceneViewer1MouseMove(Sender: TObject;
Shift: TShiftState; X, Y: Integer);
begin
// déplacement de la caméra autour de la scène en fonction des mouvements
de la souris
if [ssleft] = shift then
GLCamera1.MoveAroundTarget(my-y, mx-x);
mx := x;
my := y;
end;
Ainsi, en plaçant la souris sur la scène, en appuyant sur le bouton gauche et en déplaçant
la souris, on a la possibilité de tourner autour de la scène, selon deux axes.
-12-
Exercices de familiarisation avec GLScene
Exercice 1
•
Reprendre l'exemple précédent et ajouter un cube qui intersecte le cylindre.
•
Placer un composant Trackbar permettant de changer la focale de la caméra.
Exercice 2
•
Modifier l'apparence de chacun des 2 objets et modifiant les paramètres de la
propriété "Materials"
•
Placer un deuxième Trackbar permettant de faire tourner le cube en modifiant un
des trois angles de rotation de celui-ci
Exercice 3
•
Placer deux cônes sur deux faces du cube. Les deux cônes doivent être des
"enfants" de l'objet cube
Exercice 4
•
Effectuer une rotation de toute la scène en utilisation le déplacement de la souris
(rotation selon deux axes)
Exercice 5
•
A l'aide de l'objet "pipe" essayez d'imiter une défense d'éléphant, y compris la
couleur
Exercice 6
•
Composez une scène dans laquelle se trouve une maison simplifiée
•
Placez deux caméras
•
Trouver une manière pour passer de la vue d'une caméra à l'autre
Exercice 7
•
Réaliser le mieux possible une maquette d'hélicoptère
•
Faites tourner l'hélice (en utilisant un timer)
•
Ajoutez la possibilité de "tourner" autour à l'aide de la caméra en suivant les
mouvements de la souris
-13-