2009-04-01 6 views
1

Je voudrais essayer d'implémenter du HCI pour mon application OpenGL existante. Si possible, les menus devraient apparaître en face de mes graphiques 3D qui seraient en arrière-plan. Je pensais dessiner un carré directement devant la caméra, puis dessiner des textures ou des primitives sur le carré de la base. Lorsque les menus sont actifs, l'appareil photo ne peut pas bouger, de sorte que l'appareil photo ne détourne pas son regard des menus.Quel est un bon moyen d'implémenter HCI dans OpenGL?

Est-ce que cela semble très fétichisé à quelqu'un ou suis-je sur la bonne voie? Comment tout le monde le ferait-il?

Répondre

1

Je voudrais juste glPushMatrix, glLoadIdentity, faites votre dessin, puis glPopMatrix et ne pas s'inquiéter d'où votre appareil photo est.

Vous aurez également besoin de désactiver et réactiver test de profondeur, l'éclairage et tels

1

Il y a la bibliothèque GLUI à faire (pas d'expérience personnelle)
Ou si vous utilisez Qt il existe des moyens de En rendant les widgets Qt transparents au dessus du modèle OpenGL, il existe également un support bêta pour le rendu de tout Qt dans opengl.

1

Vous pouvez également faire tout votre rendu 3D, puis passer en projection orthographique et dessiner tous vos objets de menu. Ce serait beaucoup plus facile que de tout mettre sur un grand quad billboard comme vous l'avez suggéré.

Consultez this exerpt, en particulier le titre "Transformations de projection".

1

Comme indiqué here, vous devez appliquer une traduction de 0,375 en x et y pour obtenir un alignement parfait pixel:

glViewport(0, 0, width, height); 
glMatrixMode(GL_PROJECTION); 
glLoadIdentity(); 
gluOrtho2D(0, width, 0, height); 
glMatrixMode(GL_MODELVIEW); 
glLoadIdentity(); 
glTranslatef(0.375, 0.375, 0.0); 
/* render all primitives at integer positions */ 

L'algorithme est simple:

  1. Dessine ta scène 3D, probablement avec test de profondeur activé.
  2. Désactivez les tests de profondeur pour que vos éléments GUI dessinent sur les éléments 3D.
  3. Utilisez glPushMatrix pour vous stocker la vue du modèle actuel et les matrices de projection (en supposant que vous souhaitez les restaurer - sinon, juste l'emporter sur eux)
  4. Configurez votre vue du modèle et des matrices de projection comme décrit dans le code ci-dessus
  5. Draw vos trucs de l'interface utilisateur
  6. Utilisez glPushMatrix pour restaurer vos matrices poussé (en supposant que vous insistiez)

Faire comme ceci rend la position de la caméra hors de propos - en fait, que la caméra se déplace, les pièces 3D seront affectées comme normal, mais la superposition 2D reste en place. Je m'attends à ce que ce soit le comportement que vous voulez.

Questions connexes