OpenGL纹理太暗了

时间:2016-11-01 16:16:03

标签: c++ opengl

我遇到的问题是我的纹理渲染得比实际颜色深得多,并且黑色轮廓类似于这个问题:OpenGL Textures form SDLSurface goes too dark,但是这个解决方案不适合我,我的因此渲染代码是:

void BackgroundImage::render(int tile, Point2I offset)
{
//textures are being loaded in another thread.
    texture_mutex.lock();
    glEnable(GL_TEXTURE_2D);
    if(!textures[tile].bind())
    {
        glDisable(GL_TEXTURE_2D);
        texture_mutex.unlock();
        return;
    }

    static GLint vertices[] =
    {
                   0, -Tile::size.y, 0,
        Tile::size.x, -Tile::size.y, 0,
        Tile::size.x,             0, 0,
                   0,             0, 0
    };

    static GLfloat texCoord[] =
    {
        0, 1,
        1, 1,
        1, 0,
        0, 0
    };

    static GLubyte indices[] =
    {
        0, 1, 2,
        0, 2, 3
    };

    glPushMatrix();
    glTranslatef(offset.x, -offset.y, 0);

    glDisable(GL_BLEND);
    glDisable(GL_LIGHTING);
    glDisable (GL_COLOR_MATERIAL);
    glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE );
    glColor3f(1.0f, 1.0f, 1.0f);

    glEnableClientState(GL_VERTEX_ARRAY);
    glVertexPointer  (3, GL_INT, 0, vertices);
    glEnableClientState(GL_TEXTURE_COORD_ARRAY);
    glTexCoordPointer(2, GL_FLOAT, 0, texCoord);
    glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_BYTE, indices);

    glPopMatrix();

    glDisable(GL_TEXTURE_2D);
    texture_mutex.unlock();
}

此外,每次渲染帧时图像都会变暗,直到它们变为完全黑色(使用白色作为清晰颜色渲染)。

1 个答案:

答案 0 :(得分:0)

我发现了问题,当在另一个线程中加载纹理时,我没有从纹理槽中解除纹理,而是我只有一个插槽,我认为着色器无法解决问题。看到',因为缺少一个更好的词。解除绑定后,它会正确呈现。