Le premier site francophone dédié au développement Pocket PC


 
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.

 

 
   

 

 
   
 
   
Copyright 2001-2004 - Tous droits réservés
 
   

iPAQ est un produit de COMPAQ.
Visual Tools est un produit de Microsoft Corporation.
Toutes les autres marques et produits présents dans ces pages sont la propriété exclusive de leurs sociétés respectives.