我正在尝试使用OpenGL显示灰度图像。我知道在OpenGL上几乎为0,基本上使用的是我在网上找到的示例。以下是我要修改的代码。我本质上是为100x100的图像设置“灰度”值(0到255),因此期望使用全白/黑/灰色的图像。
不过,据我了解,OpenGL希望输入数据为RGB,因此必须为24位(假设每个通道为8位)。我只处理8位图像。我尝试了来自文档http://docs.gl/gl4/glTexImage2D
的不同输入参数(GL_ALPHA / GL_RED)反正我可以像这样制作一张8位的图片吗?
int image_width = 100;
int image_height = 100;
unsigned char image_data[image_width * image_height];
// Force the grey value for all pixels
for (int i = 0; i < image_height * image_width; i++) {
image_data[i] = 255;
}
// Create a OpenGL texture identifier
GLuint image_texture;
glGenTextures(1, &image_texture);
glBindTexture(GL_TEXTURE_2D, image_texture);
// Setup filtering parameters for display
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
// Upload pixels into texture
glPixelStorei(GL_UNPACK_ROW_LENGTH, 0);
glTexImage2D(GL_TEXTURE_2D, 0, GL_ALPHA, image_width, image_height, 0, GL_ALPHA, GL_UNSIGNED_BYTE, image_data);
答案 0 :(得分:0)
如果使用兼容性配置文件OpenGL Context,则可以使用GL_LUMINANCE
,其中每个元素都是单个亮度值。参见glTexImage2D
。
glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE, image_width, image_height, 0,
GL_LUMINANCE, GL_UNSIGNED_BYTE, image_data);