固定管道纹理渲染

时间:2015-05-27 08:20:39

标签: c++ opengl textures

我试图在四边形上映射生成的2D纹理。到目前为止渲染了四边形,但是如果我没有设置颜色它是灰色的,如果我设置顶点的颜色它会显示颜色,但纹理没有显示。

使用固定管道而不是着色器的原因是为了生成纹理,我必须将过多的数据传递给着色器以有效地生成纹理。理想情况下,我不希望有一个着色器,它应该像在四边形上渲染纹理一样简单。虽然该程序广泛使用着色器。

我尝试使用GLubyte将数据传递给glTexImage2D但得到了相同的结果。我还尝试了各种位置来调用glEnable(GL_TEXTURE_2D),glBindTexture,glTexParameteri和glTexImage2D。 此外,我评论了glTexEnvf,glBindTexture(解绑定),glDisable(GL_TEXTURE_2D)和glDeleteTextures(...)。 都具有相同的结果。

也许在使用着色器的程序中不可能使用固定管道纹理渲染?或者我在代码中犯了错误?据我所知,根据谷歌,下面的代码应该渲染四边形纹理。它让我烦恼了几天,这可能是一个简单的错误......

glGetError在代码段中的所有位置都返回0。

    std::cout<<glGetError()<<std::endl;

    GLuint texName;

    glGenTextures(1, &texName);

    glBindTexture(GL_TEXTURE_2D, texName);

    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);

    std::cout<<glGetError()<<std::endl;

    GLfloat image[64][64][4];

    for(unsigned int i = 0; i<64; i++)
    {
        for(unsigned int j = 0; j<64; j++) 
        {
            image[i][j][0] = 1.0f;
            image[i][j][1] = 0.5f;
            image[i][j][2] = (float)i/64;
            image[i][j][3] = 1.0f;
        }
    }

    std::cout<<glGetError()<<std::endl;

    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 64, 
        64, 0, GL_RGBA, GL_FLOAT, 
        image);

    std::cout<<glGetError()<<std::endl;

    glEnable(GL_TEXTURE_2D);

    glTexEnvf(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_REPLACE);

    glBindTexture(GL_TEXTURE_2D, texName);

    glBegin(GL_QUADS);
        glTexCoord2f(0, 0);     glVertex2i(10,  10);
        glTexCoord2f(0, 1);     glVertex2i(10,  110);
        glTexCoord2f(1, 1);     glVertex2i(110, 110);
        glTexCoord2f(1, 0);     glVertex2i(110, 10);
    glEnd();        

    glBindTexture(GL_TEXTURE_2D, 0);

    glDisable(GL_TEXTURE_2D);

    glDeleteTextures(1, &texName);

    std::cout<<glGetError()<<std::endl;

1 个答案:

答案 0 :(得分:0)

我应该在我的问题中提到我希望纹理在屏幕上(在2D中)。

一位同事能够帮助我并建议使用glDrawPixels,它可以正常运行(我不知道他们必须被禁用,因为大多数固定管道的东西似乎都有效,所以谢谢你吧)