为什么这个代码在OpenGL中打印白色矩形而不是红色
Why this code print white rectangle instead of red in 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。
相关文章:
- VSCode-有一个红色下划线,但程序构建和运行正确,并且出现配音错误
- C++函数中的精确"return"矩
- 内存错误低于在C++年实现埃拉托色尼筛分时的预期
- 无法输出对象的红色/绿色/蓝色值
- 列出埃拉托色尼的筛子
- 将 MFC 图像初始化为纯色
- vkCmdCopyImageToBuffer 生成纯色图像
- 计数用红色着色m灰色块的方法,其中红色块应以计数至少为n的组进行
- 在Qt C++中绘制HSV色轮
- SystemParametersInfo将背景设置为纯色,而不是实际设置图片
- 如何通过组合红色和蓝色无符号字节来优化混合?
- glTexImage2D 不起作用,但将 FragColor 设置为 vec4(1.0, 0, 0, 1.0) 会给我红色图像
- 以特征形式排列矩阵列
- 埃拉托色尼的筛子在一段上
- 如何在 Win32 应用中拖动纯色矩形,而不会产生白色闪烁,也不会干扰其他屏幕对象
- 筛子的埃拉托色尼错误实现
- 如何将控制台输出的文本颜色更改为红色,但如果从Powershell或CMD运行,背景将保持相同的颜色
- 使用 C++ 库 GLEW 在 openGl 中绘制一个红色三角形
- 红色伪像通过GSTREAMER和QT5可视化RTSP流
- 从直方图OPENCV中的峰中获取色调值