2016-07-04 25 views
1

我开发了一款使用OpenGL和C++的游戏,它一切正常,但我需要修复这个小故障:当我移动相机(使用鼠标)时,我的地图不会保留在固定位置。 它基本上是一个正方形(gl_quad),我画在我面前。OpenGL固定斑点图故障

这是毛刺的一个示例:

Video

这是一个正方形的绘制代码,如果它是需要的

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

如何移动相机?你的着色器是怎样的? – BDL

+0

我猜测地图在渲染后会移动。这就是为什么它落后于此。 –

回答

1

相反呈现GUI元素作为3D的一部分的世界,我宁愿画完这个世界,然后覆盖那个gui(没有清除缓冲区)。

这样HUD不需要根据相机的位置和旋转进行移动。此外,平视显示器元素不会与世界剪辑。

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

我在网上搜索,我没有找到一个适当的指导如何使HUD,我认为你不能在glfw – ScazzoMatto

+1

绘制的东西你可以。在OpenGL中。 –