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



我正在用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();

添加绘制代码

最有可能的问题是,由于缺乏mipmap层,您的纹理被认为是不完整的。你要么必须关闭纹理的mipmap,要么提供一个完整的mipmap层堆栈。

另外,似乎你没有启用GL_TEXTURE_2D目标上的活动纹理单元(需要如果使用固定的函数管道)。

glTexImage2d的调用有一个错误的internalFormat参数:

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

文档说它指定了纹理中颜色组件的数量,但它也说该值应该是页面末尾给出的枚举之一。

在你的例子中,应该是GL_RGB而不是3。

相关内容