Вопрос

Для моих последних нескольких проектов я использовал некоторые из утилитных файлов, которые я обнаружил, что смотрел на несколько демонстраций здесь.

А именно файл под названием opengl.h - в основном используется для управления шейдерами, как GLEW и другой файл GL_FONT.

GL_FONT - это класс, который они используют для визуализации шрифтов на экране с помощью объектов буфера вершины.

Однако, когда я использую это, чтобы сделать Framerate в моей игре, он делает все, кроме SkyBox правильно. По какой-то причине SkyBox оказывается белым, как видно здесь, если я не визую шрифт, похоже, это.

Вот некоторые части класса GL_FONT, которые я считаю наиболее важными:

void GLFont::begin()
{
    HWND hWnd = GetForegroundWindow();
    RECT rcClient;

    GetClientRect(hWnd, &rcClient);

    int w = rcClient.right - rcClient.left;
    int h = rcClient.bottom - rcClient.top;

    glPushAttrib(GL_CURRENT_BIT | GL_LIGHTING_BIT);

    glDisable(GL_LIGHTING);

    glEnable(GL_BLEND);
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

    glEnable(GL_TEXTURE_2D);
    glBindTexture(GL_TEXTURE_2D, m_fontTexture);

    glMatrixMode(GL_PROJECTION);
    glPushMatrix();
    glLoadIdentity();
    glOrtho(0.0f, w, h, 0.0f, -1.0f, 1.0f);

    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();

    glBindBuffer(GL_ARRAY_BUFFER, m_vertexBuffer);

    drawTextBegin();
}

У меня есть три метки glPushAttrib(GL_CURRENT_BIT | GL_LIGHTING_BIT); к glpushattrib (gl_current_bit | gl_lighting_bit | gl_texture_bit); И фоновая текстура возвращается, но шрифт не отображается.

void GLFont::end()
{
    drawTextEnd();

    glBindBuffer(GL_ARRAY_BUFFER, 0);

    glBindTexture(GL_TEXTURE_2D, 0);
    glDisable(GL_TEXTURE_2D);

    glDisable(GL_BLEND);

    glMatrixMode(GL_PROJECTION);
    glPopMatrix();

    glMatrixMode(GL_MODELVIEW);
    glPopMatrix();

    glPopAttrib();
}

Этот является изображением буфера глубины, когда шрифт отображается и это это то, что выглядит, когда это не так.

Может ли кто-нибудь пролить свет на эту проблему, пожалуйста?

Любая помощь приветствуется!

Спасибо.

Это было полезно?

Решение

Выглядит как begin() Не хватает А. glPushMatrix() после glMatrixMode(GL_MODELVIEW). Отказ Это может привести к тому, что сцена отображается неправильно, когда также отображается какой-то текст.

Не glGetError() отчет A. GL_STACK_UNDERFLOW ошибка?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top