我正在使用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();
添加代码
答案 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
。