Я разработал игру, используя 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);
Вместо того, чтобы визуализировать элементы GUI как часть трехмерного мира, я бы предпочел закончить рисование мира и затем наложить поверх этого графический интерфейс (без очистки буфера).
Таким образом, HUD не нужно перемещать в зависимости от положения и поворота камеры.
Кроме того, элементы HUD не будут связываться с миром.
glClear(...)
// Scene:
glPushMatrix()
glPerspective(...)
glTranslatef(...)
glRotatef(...)
glBegin(...)
// ...
glEnd(...)
glPopMatrix()
// UI:
glPushMatrix()
glOrtho(...)
glBegin(...)
// ...
glEnd(...)
glPopMatrix()
// Swap buffers
Других решений пока нет …