1

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

这是一个故障示例:

视频

这是正方形的绘制代码,如果需要的话

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);
4

1 回答 1

1

与其将 GUI 元素渲染为 3D 世界的一部分,我宁愿完成世界的绘制,然后在 gui 之上覆盖(不清除缓冲区)。

这样,HUD 就不需要根据摄像机的位置和旋转而移动。此外,HUD 元素不会与世界剪辑。

glClear(...)
// Scene:
glPushMatrix()
glPerspective(...)
glTranslatef(...)
glRotatef(...)
glBegin(...)
// ...
glEnd(...)
glPopMatrix()
// UI:
glPushMatrix()
glOrtho(...)
glBegin(...)
// ...
glEnd(...)
glPopMatrix()
// Swap buffers
于 2016-07-04T13:57:40.160 回答