Polygone au premier plan avec texte

nisaloncaje Messages postés 154 Date d'inscription samedi 7 janvier 2006 Statut Membre Dernière intervention 28 septembre 2008 - 28 juin 2006 à 18:50
nisaloncaje Messages postés 154 Date d'inscription samedi 7 janvier 2006 Statut Membre Dernière intervention 28 septembre 2008 - 29 juin 2006 à 21:14
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

luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
28 juin 2006 à 22:27
Ben dans ta fonction, faut que tu appelles les fonctions pour changer la perspective et passer en 2D.
0
Jeanlaffreu Messages postés 4 Date d'inscription mardi 27 juin 2006 Statut Membre Dernière intervention 29 juin 2006
29 juin 2006 à 09:47
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+ 
0
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
29 juin 2006 à 10:21
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 );
0
nisaloncaje Messages postés 154 Date d'inscription samedi 7 janvier 2006 Statut Membre Dernière intervention 28 septembre 2008
29 juin 2006 à 10:54
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 :)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
29 juin 2006 à 13:10
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]);

};
0
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
29 juin 2006 à 13:11
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.
0
nisaloncaje Messages postés 154 Date d'inscription samedi 7 janvier 2006 Statut Membre Dernière intervention 28 septembre 2008
29 juin 2006 à 15:00
et si les performances ne sont pas les dernieres de mes préoccupations, je fais comment ?
0
nisaloncaje Messages postés 154 Date d'inscription samedi 7 janvier 2006 Statut Membre Dernière intervention 28 septembre 2008
29 juin 2006 à 21:14
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é):(
0
Rejoignez-nous