Polygone au premier plan avec texte

Signaler
Messages postés
154
Date d'inscription
samedi 7 janvier 2006
Statut
Membre
Dernière intervention
28 septembre 2008
-
Messages postés
154
Date d'inscription
samedi 7 janvier 2006
Statut
Membre
Dernière intervention
28 septembre 2008
-
Bonjoru, je suis débutant en OpenGL et j'ai une scène en 3d en perspective. J'aimerais maintenant créer un polygone en 2d qui soit au premier plan (comme dans les fps par exemple où on voit un symbole indiquant la vie, et du texte affichant le nombre de munitions restantes), ainsi que du texte. Pour le texte j'ai "partiellement" réussi en faisant ceci :

une fonction :
void txt2d(float x,float y,float z,void *font,char *string) {
  glDisable (GL_TEXTURE_2D);
  glDisable(GL_DEPTH_TEST);


  glDisable(GL_LIGHTING);
  glEnable ( GL_COLOR );
  glColor3f ( 1.0f, 1.0f, 1.0f );
  glRasterPos2f(x,y);
    while(*string)
    {
        glutBitmapCharacter(font, *string);
        string++;
        cout<<*string<<endl;
    }


  glDisable ( GL_COLOR );
  glEnable ( GL_TEXTURE_2D );
  glEnable(GL_LIGHTING);
  glEnable(GL_DEPTH_TEST);
}

et dans la fonction d'affichage 
txt2d(1.0f,1.0f,1.0f,GLUT_BITMAP_TIMES_ROMAN_24,"Hello");

Cependant, j'ai mis ces coordonnées un peu au hasard mais j'aimerais en fait pouvoir choisir les coordonnées du pixel à l'écran donc les coordonnées 2d, plutôt que celles ci qui correspondent, je pense (vu que quand je bouge la caméra, le texte se déplace) aux coordonnées dans la 3d.

Comment faire pour le polygone et le texte ?

Merci d'avance !

8 réponses

Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
Ben dans ta fonction, faut que tu appelles les fonctions pour changer la perspective et passer en 2D.
Messages postés
4
Date d'inscription
mardi 27 juin 2006
Statut
Membre
Dernière intervention
29 juin 2006

je connais pas trop pour OpenGL, mais je crois que pour faire un "tableau de bord" avec des infos à l'écran, il vaut mieux utiliser un plan stencil. Les pixels de ta vue 3D seront testés pour être sûr que ta vue 3D ne se dessine pas par dessus ton tableau de bord. Aprés pour les détails...
a+ 
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
Nonon Jeanlaffreau, apres voir afficher ta scène 3D. Tu peux par
exemple désactiver le Zbuffer et tracer le tableau de bord en
perspective 2D.


Sinon nisaloncaje, voici un exemple dans lequel j'affichais un texte fixe sur l'écran:

La fonction d'afficachage 

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glMatrixMode(GL_MODELVIEW);

    glLoadIdentity();

   

    Draw_scene();

   

    Draw_2D(); // <= Affichage du texte


    glutSwapBuffers();

    glFlush();   


Et voici la fonction  Draw_2D:

    glLoadIdentity();

    glDisable(GL_DEPTH_TEST);

    glMatrixMode(GL_PROJECTION);

    glPushMatrix();

   

    glLoadIdentity();

    gluOrtho2D(0.0, viewport[2], 0.0, viewport[3]); //
On initialise la projection de façon a ce que les coordonnées
correspondent au pixel

    glColor3f(1.0f, 1.0f, 1.0f);

   

    glRasterPos2f(10.0f, viewport[3] - 20.0f); // <= en haut a gauche par rapport au bord de la fenetre

    drawString("INSER - Prendre une photo");

    glRasterPos2f(10.0f, viewport[3] - 40.0f); // Pareil

    drawString("HOME - Filmer");


    glPopMatrix();

    glEnable(GL_DEPTH_TEST);


Avec viewport qui est un tableau de 4 entier contenant notamment les dimensions de la fenetre d'affichage:

GLint viewport[4];

glGetIntegerv( GL_VIEWPORT, viewport );
Messages postés
154
Date d'inscription
samedi 7 janvier 2006
Statut
Membre
Dernière intervention
28 septembre 2008

ok merci, mais la fonction drawstring est une fonction d'opengl ou une fonction que vous déclarez et définissez vous meme ?

Sinon j'ai pas bien compris comme tracer la scène en perspective 2d : la simple désactivation du z buffer le permet ? et si oui, comment définir les coordonnées du polygone , sont ce les coordonnées des pixels ou je veux que soit le polygones  ? Quelles coordonnées ? Voila encore une fois merci d'avance :)
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
Mise en 2D:

    glMatrixMode(GL_PROJECTION);

    glLoadIdentity();


    gluOrtho2D(0.0, viewport[2], 0.0, viewport[3]); // On initialise la
projection de façon a ce que les coordonnées correspondent


Si tu piges pas ca, je peux pas lire les tutoriaux opengl a ta place.


Fonction DRAWSTRING:

void drawString (char *s)

{

  unsigned int i;

  for (i = 0; i < strlen (s); i++)

    glutBitmapCharacter (GLUT_BITMAP_HELVETICA_18, s[i]);

};
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
Mais j'ai pas précisé que ta méthode ou celle que je te présente la
(c'est la meme en gros) pour afficher du texte, c'est de la mrd totale.
Utilise ca seulement si les performances sont la dernière de tes
préoccupations.
Messages postés
154
Date d'inscription
samedi 7 janvier 2006
Statut
Membre
Dernière intervention
28 septembre 2008

et si les performances ne sont pas les dernieres de mes préoccupations, je fais comment ?
Messages postés
154
Date d'inscription
samedi 7 janvier 2006
Statut
Membre
Dernière intervention
28 septembre 2008

et aussi, dites moi s'il est possible que le polygone au premier plan soit légèrement transparent afin que l'on puisse voir la scène derrière (j'ai bien essayé glColor4f(0.2,0.2,0.2,0.5); mais cela n'a pas marché):(