为什么此代码在OpenGL中打印白色矩形而不是红色?

时间:2015-05-18 15:59:53

标签: c++ opengl rgb

我正在使用opengl进行一些测试并尝试绘制一个红色矩形。这是代码:

qDebug(__FUNCTION__);
float *rgbImage = (float *)malloc(width * height * 3 * sizeof(float));
float *rgbImagePtr = rgbImage;

qDebug("Initializing");
int y, x;
for(y = 0; y < height; y++)
{
    for(x = 0; x < width; x++)
    {
        *rgbImagePtr++ = 255;  // R
        *rgbImagePtr++ = 0;  // G
        *rgbImagePtr++ = 0;  // B
    }
}

// Generate false image

qDebug("Creating texture");
GLuint texture;
glGenTextures(1, &texture);

glBindTexture(GL_TEXTURE_2D, texture);
qDebug("drawing image");

glTexImage2D(GL_TEXTURE_2D, 0, 3, width, height, 0, GL_RGB, GL_FLOAT, rgbImage);
qDebug("drawing image finished");

当我运行我的例子时,我得到的是白色矩形而不是红色,因为我知道我在做什么。有什么问题?

编辑1

glBegin(GL_QUADS);
glTexCoord2f(0.0f, 0.0f); glVertex3f( 0.0f,  0.0f, 0.0f);
glTexCoord2f(1.0f, 0.0f); glVertex3f(256.0f,  0.0f, 0.0f);
glTexCoord2f(1.0f, 1.0f); glVertex3f(256.0f, 256.0f, 0.0f);
glTexCoord2f(0.0f, 1.0f); glVertex3f( 0.0f, 256.0f, 0.0f);
glEnd();

添加代码

2 个答案:

答案 0 :(得分:0)

最有可能的问题是,由于缺少mipmap图层,您的纹理被认为是不完整的。您必须关闭纹理的mipmapping或提供一整套mipmap图层。

此外,您似乎没有在活动纹理单元上启用GL_TEXTURE_2D目标(如果使用固定功能管道则需要)。

答案 1 :(得分:0)

glTexImage2d的调用internalFormat参数不正确:

glTexImage2D(GL_TEXTURE_2D, 0, 3, width, height, 0, GL_RGB, GL_FLOAT, rgbImage);
                               ^-- here

documentation表示它指定了纹理中的颜色分量数,但它也表示该值应该是页面末尾给出的枚举之一。

在你的案例中,而不是3,它应该是GL_RGB