XGouchet.fr

mardi 15 septembre 2009

De la 3D temps réel dans le browser, faites place à WebGL

Il y a bientôt quinze ans naissait le VRML, dont le but était d'intégrer des environnements 3D dans des pages web. Trop en avance sur son temps, le VRML n'est plus aujourd'hui qu'un format de donnée obsolète, remplacé par le format Collada, plus en phase avec les besoins actuels. Mais du coup de nombreuses sociétés ont tenté de créer un nouveau standard de visualisation 3D au sein d'un navigateur internet. Virtools et son Virtools Web Player 3D Life Player 3DVIA Player, Wirefusion, Quest3D, Stonetrip, sans oublier bien sur la librairie Flash Papervision, et les technologies basée sur Java3D.

Mais tout cela manque un peu de standard, et nécessite souvent l'installation d'un plugin, même si les technologies Flash/Java sont souvent présente sur une bonne partie des machines connectées au net. La solution, dévoilée au Siggraph par le Khronos Group, est un nouveau standard, nommé WebGL.

Le principe de WebGL est d'exposer en JavaScript des fonctions permettant d'utiliser OpenGL/OpenGL ES, et donc de profiter de l'accélération matérielle de la machine (PC, Laptop, Mobile, ...) sur lequel est visualisée la page web. Il est à noté que le groupe de travail sur WebGL est composé de professionnels du web (Google, Mozilla, Opera), mais aussi de constructeurs hardware (NVidia, AMD, Ericsson). En bref, une techno qu'elle va être bien à utiliser, dès que l'HTML5 sera implémenté dans tous nos browsers.


Preview of WebGL / Canvas 3D in WebKit [Youtube]

Everybody who runs a Web site knows we're not assured of compatibility, and we could end up with a split.

Tim Berners-Lee

Source : Hebiflux

lundi 27 juillet 2009

Définir le zoom du Camera sous OpenGL ES

Bon allez, un petit écart de conduite, je vais ici faire du code, du vrai, parce que j'ai pas mal cherché sur le sujet et les réponses sont pas forcément simple à trouver quand on n'a jamais fait d'OpenGL. Comme je le disais précédemment, je travaille sur un moteur 3D OpenGL sur Android. Mais sous Android, on n'utilise pas OpenGL de base mais OpenGL ES (OpenGL for Embedded Systems), qui ne contient pas autant de fonctions que la version standard.

Et notamment l'un des manque et qu'il n'y a pas de fonction gluPerspective, qui permet de spécifier l'angle de vue, et donc le zoom de la camera. Je ne me suis pas encore penché à fond sur le fonctionnement des matrices caméras, et je me sentais mal refaire les maths dans mon coin, j'ai donc cherché une autre astuce, que j'ai trouvé sur un forum iPhone. La formule, je la met pour ceux que cela peut intéresser, et surtout pour en avoir une trace quelque part ;).

void perspective(double fov, double aspectRatio, double zNear, double zFar) {
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
double yTop = zNear * tan(fovy * M_PI / 360.0);
double yBottom = -yTop;
double xLeft = yBottom * aspectRatio;
double xRight = yTop * aspectRatio;
glFrustumf(xLeft, xRight, yBottom, yTop, zNear, zFar);
glMatrixMode(GL_MODELVIEW);
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
}

Voila et désolé pour tous ceux qui ne sont pas programmeur parmi mes lecteurs, promis je ne le ferait plus... enfin pas tout de suite ;)

Caméra - Merveilleux instrument de tourisme auquel le voyageur fait voir le pays avant de le voir lui-même.

Pierre Daninos

vendredi 10 juillet 2009

Moteur OpenGL sous Android

L'un des gros avantages à être responsable R&D à l'ISART, c'est que je peux faire mes recherches sur ce que je veux (ou presque), et que je suis payé pour ça ! Récemment je vous montrais un petit jeu fait sous Android, ce qui a bien sur éveillé un peu plus ma curiosité. L'étape suivante était évidemment de faire une appli en 3D, tournant sur mon HTC Magic.

Moteur 3D OpenGL sous Android

Voila qui est chose faite (bon c'est pas finit mais c'est bien avancé). J'ai désormais un petit moteur à base d'OpenGL, capable d'importer des fichiers au format OBJ, et les textures qui vont avec (du bête jpeg). Je viens à l'instant de finir un convertisseur qui précompile les données 3D en fichier binaire, pour optimiser le temps de chargement des objets (de 7,4s avec un fichier obj, je passe à 1s pour un même mesh). A suivre le même principe pour les textures (qui doivent en plus être modifiées puisqu'en OpenGL les couleurs se lisent en ARGB et non RGBA), et une fois cela fait un petit jeu pour aller jusqu'au bout.

Tableau. Représentation en deux dimensions de quelque chose d'inintéressant en trois.

Ambrose Pierce

mardi 6 novembre 2007

Demoniak 3D : un moteur 3D scriptable en XML et LUA

Aujourd'hui, j'ai découvert un moteur 3D basé sur OpenGL, Demoniak 3D, permettant de créer des applications 3D temps réel sans avoir à utiliser du code bas niveau, ni même à utiliser le C++. En effet, le logiciel se base principalement sur une structure XML pour la description des scènes, ainsi que du script LUA pour l'interactivité.

Avant de me plonger dans ce moteur j'ai observé quelques démos dont une calculant la fractale de Mandelbrot avec le GPU, ou bien une autre montrant un effet de particules pour simuler du feu. Intrigué par ces démos et l'apparente simplicité d'utilisation d'Hyperion, je me suis décidé à y jeter un œil.

Je n'ai pour l'instant fait qu'une bête démo créant une matrice de sphère (leur tutorial sur le LUA), mais le logiciel me plait bien. Le principal interet est la structure XML, auquel on peut intégrer directement du code LUA. Le tout en fait un outil très simple à utiliser, idéal pour ceux qui veulent faire de la 3D temps réel sans passer par Ogre ou un autre moteur C++/Python/Java.

Enfin, une page m'a beaucoup plus : leurs explications sur la scène démo, qui m'a ramené quelques années en arrière quand je bavais devant la démo Lapsuus de Maturefurk, la Cybercinematastic de Loonies, la Fusion is my Energy de Ephidrena, les demos de The Black Lotus, et toute la demoscene Amiga, ou plus récemment la démo Débris de Farbrausch.


La demo "Lapsuus" de Maturefurk (2001)

Edit le 31/12/07 : Le logiciel a récemment changé de nom et s'appelle Demoniak 3d

Tout le monde savait que c'était impossible. Il est venu un imbécile qui ne le savait pas et qui l'a fait.
Marcel Pagnol