2016-07-04 2 views
1

J'ai développé un jeu en utilisant OpenGL et C++, tout fonctionne bien mais ce petit pépin que je dois corriger: quand je bouge mon appareil photo (en utilisant la souris) ma carte ne reste pas fixe. C'est essentiellement un carré (gl_quad) que je dessine devant moi.OpenGL carte fixe spot pépin

C'est un exemple de pépin:

Video

Voici le code de dessin d'un carré si elle est nécessaire

texture = scene->getTexture("map_papyrus.png"); 
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 
    glEnable(GL_BLEND); 
    glUseProgram(this->shader->getRes()); 
    glActiveTexture(GL_TEXTURE0); 
    GLint texture_location = glGetUniformLocation(this->shader-    >getFragment(), "color_texture"); 
    glUniform1i(texture_location, texture_location); 
    glBindTexture(GL_TEXTURE_2D, this->texture->getRes()); 


glBegin(GL_QUADS); 
float size = .5f; 
float offsetx = 0.0f; 
float offsety = 0.0f; 
if (set->easymode) { size = .2f; offsetx = 0.8f; offsety = 0.35f; } 
glTexCoord2f(0,0); glVertex2f(-size + offsetx, -size + offsety); 
glTexCoord2f(1, 0); glVertex2f(size + offsetx, -size +offsety); 
glTexCoord2f(1,1); glVertex2f(size + offsetx, size + offsety); 
glTexCoord2f(0, 1); glVertex2f(-size + offsetx, size + offsety); 
glEnd(); 
glTranslated(0, 0, 0.00001); 
+0

Comment déplacez-vous la caméra? À quoi ressemble votre shader? – BDL

+0

Je suppose que la carte se déplace après son rendu. C'est pourquoi il traîne comme ça. –

Répondre

1

Au lieu de rendre les éléments de l'interface graphique dans le cadre de la 3D monde, je préfèrerais finir de dessiner le monde et ensuite superposer un gui (sans effacer le buffer).

De cette façon, le HUD n'a pas besoin de se déplacer en fonction de la position et de la rotation de la caméra. En outre, les éléments HUD ne seront pas coupés avec le monde.

glClear(...) 
// Scene: 
glPushMatrix() 
glPerspective(...) 
glTranslatef(...) 
glRotatef(...) 
glBegin(...) 
// ... 
glEnd(...) 
glPopMatrix() 
// UI: 
glPushMatrix() 
glOrtho(...) 
glBegin(...) 
// ... 
glEnd(...) 
glPopMatrix() 
// Swap buffers 
+0

J'ai cherché en ligne et je n'ai pas trouvé un bon guide sur la façon de faire un HUD, je pense que vous ne pouvez pas dessiner quelque chose en 2D dans – ScazzoMatto

+1

Vous pouvez. En OpenGL. –