Avec le temps qu'on a (ma bonne jocelyne), ca m'a donné envie de coder deux ou trois trucs.Dans ma besace du jour, je vous propose libGLX3D: Une librairie pour l'utilisation des fichiers X3D dans un environnement 3D.
Cette librairie s'occupera - pour l'instant - des "Transforms Tags" (Objet) et des "Viewpoints Tags" (Cameras).
Je suis partie sur la base qu'avec trois lignes, vous êtes capable de l'utiliser dans un programme OpenGL sans difficultés.
Pour faire simple, munissez-vous d'un fichier x3d valide.
Vous en trouverez soit dans le tarball, soit en utilisant Blender et le plugin x3d.
(Notez cependant un léger bug lorsque vous créez une scène from-scratch: Après avoir sauvegardé le fichier, Editez-le avec un simple éditeur et supprimez <memory> dans le tag "Head")
Pour Initialiser :
glX3D *x3d;
x3d = new glX3D(string("my.x3d"));
Cela permettra de démarrer le parsing du fichier "my.x3d";Puis, utilisez l'appel "load()" :
Cela chargera en mémoire les informations sur les objets et les caméras.x3d->load();
À noter que "load()" renvoie le nombre d'objet chargé :
Vous pouvez obtenir ses mêmes informations en utilisant les variables objects et camerasint nbObj = x3d->load();
Sitôt le chargement effectué, vous pouvez utiliser la fonction "display()" qui se chargera de générer et d'afficher les primitives :x3d->objects.size(); x3d->cameras.size();
Bien entendu, cette fonction est à appeler dans le Renderer Core.x3d->display();
Avec une implémentation OpenGL, cela donnerait ceci :
glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
camera(); // there is no gl function
// Light & Co.
GLfloat position[] = { 0, 0, 0.8, 1 };
glLightfv(GL_LIGHT0, GL_POSITION, position);
glPushMatrix();
glEnable(GL_LIGHT0);
x3d->display();
glDisable(GL_LIGHT0);
glPopMatrix();
glutSwapBuffers();
C'est aussi simple que cela.

Bien entendu, vous pouvez utiliser certaines fonctions internes :
getTransforms charge et définie les variables internes 'objects' et 'objectsRef'. Notez que "objects" sont les coordonnés pour chaque vertex et "objectsRef" est l'index de ces mêmes coordonnés (afin de retrouver le type de polygone)int getTransforms(); void createTransforms(); void createTransform(int objectid);
CreateTransform utilise les variables objects et ObjectsRef et appelle les différentes fonctions OpenGL pour générer le rendu. CreateTransforms appelle - pour chaque object - la fonction createTransform avec l'ID de chaque objet. (sous-entendu: vous pouvez parfaitement n'afficher que certains objets)
getViewpoints est le pendant de getTransforms, mais pour les Viewpoints (Cameras)
Download: libglx3d-0.5.tar.bz2
Dans le tarball se trouve une implémentation, appelée 3dview.
Son utilisation est simple :
./3dview <x3dfile>Utilisez les exemples stockés dans le répertoire samples/.
Après, cela s'utilise grâce à la souris: Clic droit et déplacement de la souris pour faire des rotations, clic du milieu pour faire un zoom-in&zoom-out
Note: Cette librairie est a titre expérimentale, si vous voulez une librairie plus avancée, utilisez X3DLib
