| u |
|
 |
Le 20/09/2001
Présentation de Pocket GL.
|
PocketGL est la
librairie que j'ai utilisé pour le jeu 'ghost world'. En faisant
ce jeu, je voulais faire un moteur 3d sur pocket PC qui gérait
le fog (disparition progressive des objets éloignés) et
les vertex color, qui permettent de donner une impression d'éclairage
des objets.
Cette librairie n'est pas aussi bas niveau
qu' OpenGL, elle travaille au niveau des objets (ou plutot meshs), plutôt
qu'au niveau des polygones. Cependant elle présente des similitudes
avec celle ci.
Le repère est aussi comme celui d'OpenGL, c'est à dire orienté
direct, +x à droite, +y en haut, et -z dans le fond.
Pour controler les objets dans l'espace,
on utilise aussi une pile de matrices, permettant de définir rotations,
translations, échelles, et transformations hiérarchisées
entre objets.
On commence par définir une objet, en remplissant des tableaux
de données correspondant au vertex, vertex color, et faces. Ensuite
une fonction permet de l'afficher.
Les objets peuvent être définis
par code, ou sous 3dsmax. (voir les exemples :- demo1 : Définition
par code, - demo 2 à 5 : Import 3dsmax)
L'import de 3dsmax n'est pas direct, en
fait il faut d'abord exporter les données de 3dsmax sous le format
d'un fichier ASE (fichier texte). Ensuite un programme fourni dans la
version complète permet d'importer le fichier ASE, et le convertit
en 2 fichiers binaires 'importables' facilement par code.
Le premier fichier est un fichier nomé
xxxx.P3d , qui contient la géométrie, le second, un fichier
xxx.Tex, qui contient les textures.
La librairie ne gère que les objets
texturés. Si on essaye d'exporter des objets non texturés,
cela provoque une erreur lors de l'import du fichier ASE.
Les vertex color ne sont pas de réels
vertex color, dans le sens on on ne peut que définir l'intensité
lumineuse globale du vertex, et non les composantes R G B individuellement.
Lors de l'édition sous max, il n'est pas obligatoire d'assigner
des vertex color aux objets. Dans ce cas des vertex color seront définis
par défaut lors de l'import, et leurs valeurs seront définie
par une intensité lumineuse maximale.
La distance et l'épaisseur du fog peuvent être modifiés
par recompilation. Le fog est de type linéaire. On définit
la distance de départ (ex -3000) et l'épaisseur (ex 1024),
dans ce cas les objets commenceront à s'assombrir à partir
d'une distance de -3000, et seront complétement dans le noir pour
une distance > -4024. (on se déplace sur -z)
La librairie permet aussi de controler des texture animées, et
la transparence. Pour des questions de performances, la transparence est
binaire. C'est à dire que l'objet est soit totalement transparent
ou totalement opaque. La transparence est définie par une couleur
particulière (ALPHA KEY). Une couleur transparente n'est pas affiché,
et le Z buffer n'est pas modifié. Ceci est utile par exemple pour
tracer des arbre définis par 4 polygones croisés.
La transparence peut etre définie de deux façons:
- Soit on définit une texture en 32 bits avec un masque alpha.
Dans ce cas les valeurs d'alpha < 128 seront définies comme
totalement transparentes.
- Soit on définit une texture en 24 bits sans masque alpha, mais
on ajoute les caractères #k dans le nom de la texture. Dans ce
cas, lors de l'import, le programme définira les couleurs sombres
de la texture dont l'intensité lumineuse est < 64 comme étant
transparentes. (en fait si (R < 64) et (G < 64) et (B < 64))
La librairie posséde aussi toutes
les fonctions classiques de travail sur les matrices et les vecteurs,
ainsi que des fonctions trigonométriques (type atan2), adaptées
et optimisées pour fonctionner sur des nombres entiers.
Exemples de démo:
 |
DEMO1
Le premier exemple, trés simple, montre comment initialiser
un objet contenant 2 faces (Quad), et texturé. |
 |
DEMO2
Le second exemple montre comment importer la géométrie
et les textures d'un objet, ici un module lunaire.
Ici le module lunaire est défini
comme étant un seul objet.
On peut modifier le sens de
rotation avec les flèches droite/gauche.
|
 |
DEMO3
Cet exemple montre comment importer plusieurs objets (scène)
Ici le module lunaire est défini
comme étant 11 objets.
(corps, 4 pieds, antenne parabolique, 4 flammes de direction, et
un flamme du réacteur pricipal)
La démo montre aussi
comment contrôler séparemment les objets avec la pile
de matrice, et fait tourner l'antenne parabolique.
|
 |
DEMO4
Cet exemple montre comment
afficher une texture animée.
La flamme du module est une texture contenant 6 images, commutées
à chaque frame. Cela donne un effet de flamme animée.
On peut controler la puissance de la flamme avec la touche 'fléche
haut'.
La démo montre comment changer l'échelle d'un objet
: la taille de la flamme varie en fonction de la puissance.
|
 |
DEMO5, Système solaire
Cette démo montre comment
utiliser la pile de matrices pour définir des mouvements
relatifs entre objets.
Elle montre aussi comment modifier dynamiquement l'intensité
des vertex color, en faisant varier l'intensité lumineuse
du soleil.
|
Voila, c'est la fin de cette présentation
de Pocket GL.
Si des personnes sont interessées,
j'expliquerai plus précisémment les étapes pour créer
et afficher un objet.
Vous pouver télécharger
Pocket GL sur le site PocketGear.
Pierre.
|
|