Нетекстурированные четырехугольники кажутся темными - PullRequest
2 голосов
/ 07 ноября 2011

Я только начал работать с OpenGL, но столкнулся с проблемой после внедрения системы шрифтов.

Я планирую просто визуализировать несколько алгоритмов поиска пути.

В настоящее время OpenGL настраивается каквот это (OnSize вызывается один раз при создании окна вручную):

void GLWindow::OnSize(GLsizei width, GLsizei height)
{
    // set size
    glViewport(0,0,width,height);

    // orthographic projection
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(0.0,width,height,0.0,-1.0,1.0);
    glMatrixMode(GL_MODELVIEW);

    m_uiWidth = width;
    m_uiHeight = height;
}

void GLWindow::InitGL()
{
    // enable 2D texturing
    glEnable(GL_TEXTURE_2D);
    // choose a smooth shading model
    glShadeModel(GL_SMOOTH);
    // set the clear color to black
    glClearColor(0.0, 0.0, 0.0, 0.0);

    glEnable(GL_ALPHA_TEST);
    glAlphaFunc(GL_GREATER, 0.0f);  
}

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

Класс Font имеет функцию push и pop, которая выглядит следующим образом (если я правильно помню, моя система шрифтов основана на NeHe Tutorial, которому я следовал довольноНекоторое время назад):

inline void GLFont::pushScreenMatrix()
{
    glPushAttrib(GL_TRANSFORM_BIT);
    GLint   viewport[4];
    glGetIntegerv(GL_VIEWPORT, viewport);
    glMatrixMode(GL_PROJECTION);
    glPushMatrix();
    glLoadIdentity();
    glOrtho(viewport[0],viewport[2],viewport[1],viewport[3], -1.0, 1.0);
    glPopAttrib();
}

inline void GLFont::popProjectionMatrix()
{
    glPushAttrib(GL_TRANSFORM_BIT);
    glMatrixMode(GL_PROJECTION);
    glPopMatrix();
    glPopAttrib();
}

Итак, проблема: если я не рисую текст, я вижу квады, которые я хочу нарисовать, но они довольно темные, так что, должно быть, что-то не так с моимобщие свойства матрицы OpenGL.Если я нарисую текст (чтобы вызывались связанные со шрифтом функции push и pop), я не вижу никаких квадов.

Вопрос: как мне решить эту проблему, и некоторая справочная информация, почему это произошло, было бы неплохо, потому что я все еще начинающий / студент, который только начал.

1 Ответ

3 голосов
/ 07 ноября 2011

Если ваши четырехугольники нетекстурированы, вы столкнетесь с неопределенным поведением. Вероятно, случится так, что будет использоваться любая предыдущая текстура и будет использоваться цвет в точке (0,0), что может быть причиной того, что они будут невидимыми.

Действительно, вам нужно отключить текстурирование, прежде чем пытаться рисовать нетекстурированные четырехугольники, используя glDisable(GL_TEXTURE_2D). Опять же, если вы этого не сделаете, он просто будет использовать предыдущие текстуры и координаты текстуры, которые, не видя вашу петлю draw(), я предполагаю, что она не определена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...