无纹理四边形看起来很暗

时间:2011-11-07 16:37:53

标签: c++ opengl

我刚开始使用OpenGL,但在实现Font系统后遇到了问题。

我的计划是简单地想象几种寻路算法。

目前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系统是基于我很久以前的NeHe教程):

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矩阵属性一定有问题。 如果我绘制文本(所以调用与字体相关的推送和弹出函数)我看不到任何四边形。

问题: 我如何解决这个问题和一些背景信息为什么会发生这种情况也很好,因为我还是一个初学者/学生,刚刚开始。

1 个答案:

答案 0 :(得分:3)

如果您的四边形没有纹理,您将遇到未定义的行为。可能会发生的是,将使用任何先前的纹理,并且将使用点(0,0)处的颜色,这可能是导致它们不可见的原因。

实际上,您需要在尝试使用glDisable(GL_TEXTURE_2D)绘制无纹理四边形之前禁用纹理。同样,如果你不这样做,它只会使用之前的纹理和纹理坐标,而不会看到你的draw()循环,我假设是未定义的。