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 に答える