Opengl Rgba从1个组件到灰度

时间:2011-12-15 10:29:21

标签: c++ c opengl textures

假设我有一个32bbp像素阵列,但我只使用像素中的蓝色通道/分量。我需要将此像素阵列上传到灰度/亮度格式的纹理。例如,如果a具有颜色(a:0,r:0,g:0,b:x),则它需要在纹理中变为(0,x,x,x)。

我正在使用Opengl v1.5

1 个答案:

答案 0 :(得分:3)

OpenGL到版本2的纹理内部格式为GL_LUMINANCE,它完全符合您的要求。

在OpenGL-3中,它被替换为内部格式GL_R(GL_RED),它是单个组件纹理。在着色器中,您可以使用像

这样的混合体
gl_FrontColor.rgb = texture().rrr;

但是也可以选择设置一个“静态”,你可以在纹理参数中称之为swizzle:

glTexParameteri(GL_TEXTURE_…, GL_TEXTURE_SWIZZLE_R, GL_RED);
glTexParameteri(GL_TEXTURE_…, GL_TEXTURE_SWIZZLE_G, GL_RED);
glTexParameteri(GL_TEXTURE_…, GL_TEXTURE_SWIZZLE_B, GL_RED);