没有纹理的四边形看起来很暗

Untextured Quads appear dark

本文关键字:看起来 四边形 纹理      更新时间:2023-10-16

我刚开始使用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);  
}

理论上我不需要混合,因为我只会使用无纹理的四边形来可视化障碍物和线条等来绘制路径…所以所有的东西都是无纹理的,除了字体…

字体类有一个推送和弹出功能,看起来像这样(如果我没记错的话,我的字体系统是基于一个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矩阵属性一定有问题。如果我绘制文本(所以字体相关的push和pop函数被调用),我看不到任何Quads。

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

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

真的,你需要禁用纹理之前尝试使用glDisable(GL_TEXTURE_2D)绘制无纹理的四边形。再次,如果你不这样做,它只会使用以前的纹理和纹理坐标,没有看到你的draw()循环,我假设是未定义的。