/* CGIL Styles definitions for color coding */

Wednesday, October 28, 2009

Webgl est disponible dans les "nightly builds" de Firefox !

Depuis fin-septembre on a pu lire sur le blog de Vladimir Vukićević qu'il était possible de tester WebGl (qui est une implémentation d'OpenGL ES 2.0 utilisant JavaScript et Canvas ).
C'est très réjouissant car cela signifie que l'on peut raisonnablement envisager d'utiliser du code OpenGl dans un navigateur digne de ce nom d'ici 2010.
Car il faut savoir que le support de webgl est aussi présent dans  le trunk  de webkit depuis début octobre. Or Webkit est le composant de navigation de base pour les navigateurs Safari, Google Chrome et Konqueror.
Voici une marche à suivre récapitulative rapide pour tester  et/ou dévelloper avec du webgl sous firefox :

  1. Aller chercher le dernier nightly build sur le site de mozilla: http://ftp.mozilla.org/pub/mozilla.org/firefox/nightly/latest-trunk/
  2. Ensuite  utiliser l'url about:config pour modifier la valeur de l'option webgl.enabled_for_all_sites et la fixer à true (un simple double-click)
  3. Si vous êtes sur Microsoft avec une machine qui n'a pas de matériel Opengl vous pouvez installer le fichier webgl-mesa-751.zip  et utiliser la clé webgl.osmesalib dans about:config pour indiquer le chemin ou se trouve ce fichier sur votre disque (par exemple "C:\temp\osmesa32.dll" si vous avez copié le fichier dans temp)
Il est à noté que avec ce dernier point j'ai pu tester avec succès  l'exemple de vlad sur une bécanne virtuelle Microsoft Vista tournant sur du kvm sur un serveur proxmox distant ! Bon d'accord c'était pas des plus rapides dans ce cas mais ça fonctionnait...

Thursday, May 28, 2009


La Ville d'Oslo et la ville Stockholm sont accessible en ligne depuis un guichet cartographique 3D que l'on peut consulter à loisir avec cet url pour Stockholm: http://www.hitta.se/3d/3d_map.aspx et avec celui-ci pour Oslo http://kart.sesam.no/3d/ (attention dans ce dernier cas seul le navigateur IE sous Microsoft est supporté ce qui est plus que dommage).
Il s'agit d'un modèle numérique 3d avec texture de tous le territoire de Stockolm (env 200km) avec des bâtiments en 3d texturés les arbres les ponts etc....
Comme expliqué sur cet article de SlashDot ce qui rend ce projet intéressant est qu'il semblerait que tout le modèle de la Ville a été généré en une dizaine de jours à partir de photos aériennes uniquement.
Bien sur la qualité et la précision n'est pas la même que sur un modèle Laser mais les couts n'ont rien à voir et il s'agit d'une solution tout à fait intéressante pour des urbanistes et pour le grand public qui devient très friand de ce genre de solution.
Voici un lien sur la traduction automatique par Google Translator d'un article technique en suédois


L'approche prise pour la réalisation de ce projet est intéressante car il y a eut un mixage de compétences de deux sociétés d'horizons très distincts: d'une part C3 qui est une filiale de Saab spécialisé dans des aspects métiers tels que robotique, militaire etc...
et d'autre part il y avait Agency9 qui est une société de jeux qui avait dévellopé un moteur 3d de visu pour le web

Wednesday, April 15, 2009

J'ai trouvé intéressant le projet osgModeling qui est une librairie de modélisation pour OpenSceneGraph(OSG). Elle permet de générer différentes types de surfaces comme les extrusions, révolutions, lofts, Béziers & NURBS.
Une des caractéristiques importantes de cette librairie est d'aider l'implémentation de polygones multiples ainsi que la subdivision de polygones.

OpenSceneGraph (ou OSG pour les intimes) est une librairie graphique extraordinaire il s'agit à ma connaissance du scene graph open source le plus populaire et abouti ! Utilisé dans de nombreux autres projets commerciaux ou libre (comme par exemple le gaming & simulation engine : delta 3d) c'est vraiment un outil très puissant que j'étudie depuis un certain temps.
L'installation et la compilation de la librairie sous linux est relativement simple à partir du code source (très beau travail avec cmake), il faut installer au préalable quelques dépendances . Le cas échéant il y a aussi des paquets binaires tout prêts (typiquement pour les OS Microsoft).
Côté documentation, il y a un excellent "Quick Start Guide" de Paul Martz qui est disponible gratuitement sous une forme électronique mais bon comme souvent dans le monde OpenSource il ne faut pas hésiter à regarder le code source des nombreux exemples. Je propose ci après ce qui est probablement le plus basique des exemples histoire de vous mettre le pied à l'étrier :

/*******************************************************
** cgilosg01_drawmeacow.cpp
** the most basic and simplistic as possible example
** of using openscenegraph to draw a beautiful cow
********************************************************/

#include <iostream>
#include <osgDB/ReadFile>
#include <osgViewer/Viewer>
#include <osgViewer/ViewerEventHandlers>

#define MY_MODEL "cow.osg"

int main (int argc, char** argv)
{
osgViewer::Viewer viewer;
// Let's load a very nice model
osg::ref_ptr<osg::Node> loadedModel = osgDB::readNodeFile(MY_MODEL);
if (!loadedModel) {
std::cerr << "Problem opening the model " << MY_MODEL << "\n";
exit (1);
}
viewer.setSceneData(loadedModel.get());
viewer.realize();
return viewer.run();
}


Pour compiler cet exemple sous Linux il suffit d'utiliser g++ comme suit :
g++ -losgDB -losgViewer cgilosg01_drawmeacow.cpp -o cgilosg01_drawmeacow
il vous faut ajouter dans votre répertoire courant le fichier cow.osg qui se trouve dans le fichier de données exemples OpenSceneGraph-Data-2.8.0.zip ou mieux il suffit de fixer une variable d'environnement OSG_FILE_PATH pour la faire pointer sur l'endroit ou vous avez décompressé le fichier ci-dessus
export OSG_FILE_PATH='/usr/local/share/osg/OpenSceneGraph-Data/'
bonne découverte !

Monday, January 08, 2007


Voici mon premier exemple de programme opengl en c++ en utilisant QT
pour le compiler il faut sauver les deux fichiers ci-dessous 01_2dsquare.pro et 01_2dsquare.cpp
dans un répertoire ensuite il faut lancer en ligne de commande :
qmake 01_2dsquare.pro
make
./01_2dsquare
ce programme est trivial dans le sens ou il ne fait qu'afficher un carré bleu centré sur la fenêtre,
mais il permet d'illustrer l'utilisation du widget QGLWidget pour utiliser du opengl avec la librairie QT
pratiquement il suffit d'implémenter une classe qui hérite de QGLWidget et dans cette sous-classe il faut implémenter les trois fonctions virtuelles de la classe parent :
initializeGL() qui permet d'initialiser le contexte opengl
resizeGL(int width, int height) qui est appelée à chaque redimensionnment de la fenêtre
paintGL() ou l'on dit ce que l'on veut dessiner et qui est appelée chaque fois que le widget qt doit être affiché
*******************************************************************************************
# Filename : 01_2dsquare.pro
TEMPLATE = app
TARGET =
DEPENDPATH += .
INCLUDEPATH += .
QT += opengl
# Input
SOURCES += 01_2dsquare.cpp

/***********************************************************************
* QT OpenGL tutorial    : 01_2dsquare.cpp
* Autor : cgil
* Date : 20070107
* Very simple example to draw a square with opengl using Qt widget QGLWidget
******************************************************************/
#include <QApplication>
#include <QGLWidget>

// CgQtOpenGl is my simple subclass from QGLWidget
class CgQtOpenGl : public QGLWidget
{
public:
    CgQtOpenGl(QWidget *parent)  : QGLWidget(parent)  {        
    }
    
    CgQtOpenGl()  : QGLWidget()  {         
    }
       
    QSize sizeHint() const {
        return QSize(200, 200);
    }

protected:
    QColor cgColorBG;
    QColor cgColorFG;
    
    // initializeGL : Sets up the OpenGL rendering context & other init stuff like display lists
    //                      its  called once before the first time resizeGL() or paintGL() is called.
    void initializeGL()  {         
        cgColorBG = QColor::fromRgb(0,0,0,0) ;  // for BackGround Color
        cgColorFG = QColor::fromRgb(0,0,255,0) ; // for ForeGround Color
        qglClearColor(cgColorBG);       // note here that we use the QT qglClearColor instead of glClearColor to be able to use QColor object
        glEnable(GL_DEPTH_TEST);
        glShadeModel(GL_FLAT);         
    }
    
    // resizeGL : Sets up the OpenGL viewport, projection, etc.
    //                 its called whenever the the widget has been resized & when widget is first shown (auto resize event)
    void resizeGL(int width, int height)  {         
        int side = qMin(width, height);
        glViewport((width - side) / 2, (height - side) / 2, side, side);
        glMatrixMode(GL_PROJECTION);
        glLoadIdentity();
        glOrtho(0.0, 1.0, 0.0,1.0, -1.0, 15.0);
        glMatrixMode(GL_MODELVIEW);         
    }

    // paintGL : Renders the OpenGL scene
    //
    void paintGL() {
         // draw the scene:
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
        glLoadIdentity();
        
        qglColor(cgColorFG);        
        glBegin(GL_POLYGON);
            glVertex3f (0.25, 0.25, 0.0);
            glVertex3f (0.75, 0.25, 0.0);
            glVertex3f (0.75, 0.75, 0.0);
            glVertex3f (0.25, 0.75, 0.0);
        glEnd();
        glFlush ();
    }
};

int main(int argc, char *argv[])
{
        
    QApplication app(argc, argv);
    CgQtOpenGl glWidget ;
       
    glWidget.setWindowTitle("Hello OpenGl");
    
    glWidget.show();
    return app.exec();
}

Wednesday, October 18, 2006

La PlayStation 3 de Sony pourra utiliser Linux !
Terra Soft vient d'annoncer que la version 5.0 de sa distro Linux YellowDog tournera sur la PS3 ! Et ça c'est une excellente nouvelle pour au moin deux raisons, la première étant que cela démocratise encore plus l'OS Linux auprès du grand public et la deuxième c'est que la PS3 avec le processeur Cell


c'est de la dynamite à l'état pur pour le 3D ! Et pour pas cher...
il faut savoir que le Cell est fabriqué par IBM et qu'il a déjà été testé sur des blades du Big Blue et cette bestiole offre un sympathique 200 GFlops en précision simple et croyez moi c'est beaucoup...
Si à cela vous rajouter que la Ps3 contiendra un GPU Nvidia de toute dernière génération ça va cracher du 3d avec un réalisme assez hébourifant.

C'est la démocratisation du 3D et la porte ouverte pour une nouvelle génération d'applications qui saurons tirer parti de cette puissance pour repenser la relation entre l'utilisateur lambda et son ordinateur en offrant par exemple une interface utilisateur en 3d. Alors programmeurs à vos claviers et ressorter vos manuels de maths & géométrie...

Wednesday, January 04, 2006

Il y a très longtemps que je m'intéresse à tout ce qui touche à la représentation en 3 dimension sur l'ordinateur, modélisation, programation etc...
Je vais utiliser ce blog pour garder une trace écrite de ce que je découvre dans ce domaine.
En ce moment je m'intéresse surtout :

  1. aux outils de modélisation Opensource tel que Blender
  2. à la programmation 3d en temps réel avec OpenGL



Cliquez pour aller downloader la dernière version de Blender